Perl 重写 OpenGL RedBook 绘制位图示例 - drawf.c

头像
PerlMonk
渐入佳境
渐入佳境
帖子: 51
注册时间: 2016年09月19日 10:20
拥有现金: 锁定
Has thanked: 4 times
Been thanked: 3 times
联系:

Perl 重写 OpenGL RedBook 绘制位图示例 - drawf.c

帖子 #1 PerlMonk » 2017年07月22日 11:50

源代码 drawf.c

代码: 全选

#include <GL/gl.h>
#include <GL/glu.h>
#include "aux.h"

GLubyte rasters[24] = {
    0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
    0xc0, 0x00, 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00,
    0xc0, 0x00, 0xc0, 0x00, 0xff, 0xc0, 0xff, 0xc0};

void myinit(void)
{
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glClearColor(0.0, 0.0, 0.0, 0.0);
}

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glRasterPos2i (20.5, 20.5);
    glBitmap(10, 12, 0.0, 0.0, 12.0, 0.0, rasters);
    glBitmap(10, 12, 0.0, 0.0, 12.0, 0.0, rasters);
    glBitmap(10, 12, 0.0, 0.0, 12.0, 0.0, rasters);
    glFlush();
}

void myReshape(GLsizei w, GLsizei h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, w, 0, h, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
}


int main(int argc, char** argv)
{
    auxInitDisplayMode(AUX_SINGLE | AUX_RGBA);
    auxInitPosition(0, 0, 500, 500);
    auxInitWindow(argv[0]);
    myinit();
    auxReshapeFunc(myReshape);
    auxMainLoop(display);
}


Perl代码
=info
Auth: 523066680
Date: 2017-07
=cut

use Encode;
use Time::HiRes qw/time sleep/;
use OpenGL qw/ :all /;
use OpenGL::Config;

our $SIZE_X = 500;
our $SIZE_Y = 500;
our $WinID;

&Main();

sub display
{
glClear(GL_COLOR_BUFFER_BIT);
my @rasters =
(
0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
0xc0, 0x00, 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00,
0xc0, 0x00, 0xc0, 0x00, 0xff, 0xc0, 0xff, 0xc0
);

my $array = OpenGL::Array->new( scalar( @rasters ), GL_UNSIGNED_BYTE );
$array->assign(0, @rasters);

glRasterPos2i(0.0, 0.0);
glBitmap_c( 10, 12, 0.0, 0.0, 12.0, 0.0, $array->ptr() );
glBitmap_c( 10, 12, 0.0, 0.0, 12.0, 0.0, $array->ptr() );
glBitmap_c( 10, 12, 0.0, 0.0, 12.0, 0.0, $array->ptr() );
glutSwapBuffers();
}

sub init
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
}

sub idle
{
sleep 0.1;
glutPostRedisplay();
}

sub hitkey
{
my $key = shift;
glutDestroyWindow($WinID) if ( lc(chr($key)) eq 'q' );
}

sub Main
{
glutInit();
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE );
glutInitWindowSize($SIZE_X, $SIZE_Y);
glutInitWindowPosition(1,1);
our $WinID = glutCreateWindow("glBitmap");
&init();
glutDisplayFunc(\&display);
glutKeyboardFunc(\&hitkey);
glutIdleFunc(\&idle);
glutMainLoop();
}

回到 “模块”

在线用户

用户浏览此论坛: 没有注册用户 和 3 访客