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

回复
头像
PerlMonk
渐入佳境
渐入佳境
帖子: 49
注册时间: 2016年09月19日 10:20
联系:

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

帖子 PerlMonk »

源代码 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(); }
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客