我正在尝试使用OpenGL绘制三角图。这是我的代码的一部分:
double x = -1;
gl.glColor3d(0, 0, 0);
gl.glBegin(gl.GL_LINES);
gl.glVertex2d(x, Math.sin(Math.toRadians(x))*0.01);
gl.glVertex2d(x+0.01, Math.sin(Math.toRadians(x+0.01))*0.01);
gl.glEnd();
x += 0.01;
我的完整代码中重复了这一部分。执行此操作时,我什么也看不见。谁能告诉我为什么会这样呢?
答案 0 :(得分:0)
我的代码中没有看到任何循环
并且尺度是可疑的(没有矩阵很难说)试试这个:
double x;
gl.glColor3d(0.0, 0.0, 0.0);
gl.glBegin(gl.GL_LINE_STRIP);
for (x=-180.0;x<=180.0;x+=0.01)
gl.glVertex2d(x/180.0, Math.sin(Math.toRadians(x)));
gl.glEnd();
它使用LINE_STRIP
代替LINES
,图表缩放为<-1,+1>
,这很可能是您的观看区域...
设置强>
此外,可能还有其他问题,如评论建议。在他们之上检查明显的:
gl.glDisable(gl.GL_DEPTH_TEST);
gl.glDisable(gl.GL_TEXTURE_2D);
如果它们是从代码的其他部分设置的......
错误的相机设置
我没有看到任何矩阵代码,所以我希望你的相机朝向正确的方向,你的图形在里面或者你用的任何东西......
GL渲染
如果您的GL代码丢失或结构错误,那么它应该看起来像这样(将所有项目符号组合在一起):
// (double) buffering
gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT); // non eed for the depth although
// here set matrices in case they are not persistent
gl.glMatrixMode(gl.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glMatrixMode(gl.GL_PROJECTION);
gl.glLoadIdentity();
// here set/reset config the pipeline
gl.glDisable(gl.GL_DEPTH_TEST);
gl.glDisable(gl.GL_TEXTURE_2D);
gl.glLineWidth(1.0);
// here render
double x;
gl.glColor3d(0.0, 0.0, 0.0);
gl.glBegin(gl.GL_LINE_STRIP);
for (x=-180.0;x=<180.0;x+=0.01)
gl.glVertex2d(x/180.0, Math.sin(Math.toRadians(x)));
gl.glEnd();
// (double) buffering
gl.glFlush();
SwapBuffers(hdc);
我没有在JAVA中编码,所以代替SwapBuffers(hdc);
使用JAVA中的任何内容来实现相同的目的。希望我在翻译JAVA时没有犯任何错误。
有关详细信息,请参阅: