请教OpenGL高手一个程序改动问题

请教OpenGL高手一个程序改动问题,第1张

因为你的字母是用光栅字体显示的,不能直接放大你的

rasters[12] = {

0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xfc,

0xfc, 0xc0, 0xc0, 0xc0, 0xff, 0xff};

中保存的就是e

有两种方法,一是另外定义其他rasters数组,存放更大的光栅字体

二是用几何字体

怎么定义一般是不用你来做的,一般是专门设计字库的人来完成做好后让用户直接调用你要想知道怎么设计能让它大一倍而且好看,只有去查专门的光栅字库字体定义了,可能还有其他问题,那你需要查更多资料

光栅字体本质上就是不支持旋转和缩放的

也不一定非要改大小,这样改也行啊,用GLUT替代

aux很大程度上已经被glut库取代,Aux库在windows实现有很多错误,因此很容易导致频繁的崩溃

#include "windowsh"

#include <GL/glh>

#include <GL/gluh>

#include <GL/gluth>

#include <GL/glauxh>

GLubyte rasters[12] = {

0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xfc,

0xfc, 0xc0, 0xc0, 0xc0, 0xff, 0xff};

GLfloat x = 00f;

GLfloat y = 00f;

GLfloat xstep = 10f;

GLfloat ystep = 10f;

void myinit(void)

{

glPixelStorei (GL_UNPACK_ALIGNMENT, 1);

glClearColor (00, 00, 00, 00);

glClear(GL_COLOR_BUFFER_BIT);

}

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f (10, 00, 00);

glRasterPos2i (x, y);

glBitmap (8, 12, 00, 00, 500, 500, rasters);

glColor3f (00, 10, 00);

glRasterPos2i (150, 150);

glBitmap (8, 12, 00, 00, 00, 00, rasters);

glColor3f (00, 00, 10);

glRasterPos2i (200, 200);

glBitmap (8, 12, 00, 00, 00, 00, rasters);

glutSwapBuffers();

}

void myReshape(GLsizei w, GLsizei h)

{

glViewport(100, 100, w, h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho (0, w, 0, h, -10, 10);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

// Called by GLUT library when idle (window not being

// resized or moved)

void TimerFunction(int value)

{

if(x > 100 || x < 0 )

xstep = -xstep;

// Reverse direction when you reach top or bottom edge

if( y > 100 || y < 0 )

ystep = -ystep;

x += xstep;

y += ystep;

// Redraw the scene with new coordinates

glutPostRedisplay();

glutTimerFunc(33,TimerFunction, 1);

}

int main(int argc, char argv[])

{

//auxInitDisplayMode (AUX_DOUBLE | AUX_RGBA);

//auxInitPosition (0, 0, 500, 500);

//auxInitWindow ("Bitmap");

//myinit();

//auxReshapeFunc (myReshape);

//

//auxMainLoop(display);

glutInit(&argc, argv);

glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA );

glutInitWindowSize(500,500);

glutCreateWindow("Bitmap");

glutDisplayFunc( display );

glutReshapeFunc( myReshape );

glutTimerFunc(33, TimerFunction, 1);

myinit();

glutMainLoop();

return 0;

}

“GPU拒绝访问”错误通常是由于Opengl程序试图访问 *** 作系统禁止的内存区域导致的。这可能是由于以下几个原因造成的:

1 内存访问越界:当Opengl程序访问超出分配给它的内存区域时,就会发生“GPU拒绝访问”错误。因此,您应该确保程序中没有越界访问的情况发生,尤其是在使用指针和数组时。

2 缓冲区对象绑定错误:如果Opengl程序在使用缓冲区对象时没有正确绑定它们,那么就会发生“GPU拒绝访问”错误。您应该检查程序中的缓冲区对象是否正确绑定,并确保它们被正确地创建和初始化。

3 硬件或驱动程序问题:有时,“GPU拒绝访问”错误可能是由于硬件或驱动程序问题导致的。您应该确保您的图形驱动程序是最新的,并且您的硬件符合Opengl的要求。

为了解决“GPU拒绝访问”错误,您可以尝试以下方法:

1 检查代码中是否存在内存访问越界的情况,特别是在使用指针和数组时。

2 检查缓冲区对象是否正确绑定,并确保它们被正确地创建和初始化。

3 更新图形驱动程序到最新版本,并确保您的硬件符合Opengl的要求。

4 如果上述方法无效,您可以尝试使用调试工具来诊断问题。例如,您可以使用gDEBugger等工具来检查Opengl程序的内存使用情况和调用栈,以找出可能的错误。

通过执行上述方法,您可以更轻松地解决Opengl程序中的“GPU拒绝访问”错误,并确保您的程序在渲染过程中正常工作。

学DirectX吧,opengl的资源大部分都更新比较快,所有书本老早就过时了。而且文档一点都不规范,学起来根本毫无重点,虽然它能跨平台,渲染速度有比DirectX快一点。但是入手特别慢,特别是在国内。

复杂的模型就是通过maya或者3DMAX这样的软件做好了之后,在opengl或者DirectX中用程序读入,然后用opengl或者DirectX的绘制方式显示出来就行了。你如果只知道glBegin什么的就不用绘制了,这都是书上的函数,1千个面不到就会卡。高级的东西在网络上,也得自己找资料。

我没学过DirectX,我做了三年的opengl。但是感觉DirectX的文档比opengl的规范很多,而且微软提供很多例子,专门为游戏做的。

opengl兼顾的使命太多,所以文档很乱。你甚至都不能从官方直接获取最新的SDK,官方的解释说:oh~不好意思,我们只开发核心库,至于完整的opengl你可以从别的开源项目中获取,你如果没有自己找过opengl库,你用的只不过是微软上自带的opengl11的版本(那时候微软也参与了opengl项目。),但自从它搞了DirectX就退出opengl了。

对于opengl来说,读入的方式就是你自己去找各种模型的二进制文件格式,然后用C或者C++读二进制文件的方式读入。很简单的,最后你获得的数据都是顶点啊、法线啊、纹理坐标啊、还有如何把顶点连接成面的信息,模型的材质文件是渲染模型获得真实感的关键。

有一种模型文件不是二进制的,就是obj格式文件,你可以用文本文档打开看,你就知道里面写的些啥了,只不过是一些你不愿意在程序里面做的一些繁琐的数据。入门级别就先拿obj格式练练手吧。

是两个不同的库,OpenCV是一个基于(开源)发行的跨平台计算机视觉库,OpenGL(全写OpenGraphicsLibrary)是个定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。

以上就是关于请教OpenGL高手一个程序改动问题全部的内容,包括:请教OpenGL高手一个程序改动问题、opengl渲染gpu拒绝访问、用openGL怎么做3D游戏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9646247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存