我已经检查了关于这个主题的其他问题,他们的解决方案对我没用.我有点失落.我的GLEventListener实现中有以下函数.
public void init(GLAutoDrawable gl) {
GL2 gl2 = gl.getGL().getGL2();
gl2.glMatrixMode(GL2.GL_PROJECTION);
gl2.glLoadIdentity();
GLU glu = GLU.createGLU(gl2);
glu.gluPerspective(45.0f, 1, 0.1f,100.0f);
gl2.glMatrixMode(GL2.GL_MODELVIEW);
gl2.glLoadIdentity();
gl2.glViewport(0, 0, width, height);
gl2.glEnable(GL.GL_DEPTH_TEST);
}
private void render(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
GLU glu = GLU.createGLU(gl);
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
glu.gluLookAt(5, 0, 20,
0, 30, 0,
0, 1, 0);
gl2.glPushMatrix();
gl2.glClear( GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT );
gl2.glLoadIdentity();
gl2.glTranslatef(x, y, z);
gl2.glBegin( GL2.GL_QUADS );
gl2.glColor3f( 1, 0, 0 );
//24 glVertex3f calls & some colour changes go here.
gl2.glVertex3f(...) …Run Code Online (Sandbox Code Playgroud) 我gluNurbsCurve用来画一些控制点的曲线。我已经按照红皮书中的描述进行了基本设置,可以正常工作,并且我正在尝试对其进行扩展。
该示例如下所示:
float knots[8] = {0,0,0,0,1,1,1,1};
float pnts[4][3] = { {...},{...},{...},{...} };
GLUnurbsObj *m = gluNewNurbsRenderer();
gluBeginCurve(n);
gluNurbsCurve(n, 8, knots, 3, pnts, 4, GL_MAP1_VERTEX_3)
gluEndCurve(n);
Run Code Online (Sandbox Code Playgroud)
我想知道的一件事是结数据的含义。它如何影响结果?我在那里还能尝试其他什么选择?
由于某种原因,我找不到任何可以正确解释此问题的教程。
详细说明行中设置提供的功能:
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我知道这条线将通过请求双重buffere设置初始化显示模式,设置RGBA窗口模式并请求深度缓冲,但我怎样才能更简单地解释这一点.我想用简单的英语描述每个论点
如果我只想使用一个顶点数组格式,那么渲染我生成的数据非常困难.
我试图提供GLU_TESS_EDGE_FLAG_DATA回调,但它使我的程序崩溃.(也试过没有"_DATA",效果相同).
我怎样才能让它只生成GL_TRIANGLES?
尝试在带有 netbeans 和 cygwin 4.8.1 的 64 位 Windows 8 上使用本教程。
我收到很多这样的错误:/usr/include/w32api/GL/glu.h:68:79: error: expected ')' before '*' token.
在这样的语句上: void APIENTRY gluQuadricCallback(GLUquadric *qobj,GLenum which,void (CALLBACK *fn)());
错误消息上的指针指向 fn() 之前的 *。
编辑:包括windef.h 摆脱编译器错误消息。
我留下了一堆未定义的引用,例如:glfwInit
edit2:使用 André Fischer 的想法,我可以得到一个干净的编译(你需要为链接器添加目录和 -l 选项)。
我现在有一个:在搜索 -lopengl32 时跳过不兼容的 ../../../../../Windows/SysWOW64/opengl32.dll 和:对 `_ imp _vsnprintf' 的未定义引用。所以看起来我有一个 32/64 位问题和一个未定义的外部问题。
必须有一种更明智的方法让 opengl 在 Windows 上工作。
我试图在屏幕上画一个正方形,但它清楚地绘制了一个矩形.

这是我的渲染代码:
glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(0,0,-0.1);
glBegin(GL_QUADS);
glVertex3f(0,0,0);
glVertex3f(1,0,0);
glVertex3f(1,1,0);
glVertex3f(0,1,0);
glEnd();
SDL_GL_SwapBuffers();
Run Code Online (Sandbox Code Playgroud)
和OpenGL初始化代码:
glClearColor(0,0,0,0.6f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30,640.0/480.0,.3f,200.0);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
几天前我发布了这个问题(我不知道打开一个新线程是否合适......但是当我从这篇文章得到答案时我会关闭那个):QGLWidget在Mac OS X Lion下无法正常工作.
我在网上抓了一些示例代码,将它们与我的相比较,并确认问题是由以下因素引起的:
gluOrtho2D(0, w, 0, h);
Run Code Online (Sandbox Code Playgroud)
并在将其更改为:
glOrtho(0, w, 0, h, -1, 1);
Run Code Online (Sandbox Code Playgroud)
并删除了glu作为依赖,我的程序工作.为什么?有什么不同?
我想制作窗口的大小(800,800),但GL命令
glutInitWindowSize(800, 500);
Run Code Online (Sandbox Code Playgroud)
不会以任何方式影响我的代码.Bellow是完整的源代码.
#include <stdio.h>
#include <stdlib.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <GL/gl.h>
#include <GL/glx.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <iostream>
#include <math.h>
using namespace std;
struct point{
GLfloat x;
GLfloat y;
};
float a,b;
void initGL() {
// Set "clearing" or background color
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Black and opaque
}
/* Handler for window-repaint event. Call back when the window first appears and
whenever the window needs to be re-painted. */
void display() {
glClear(GL_COLOR_BUFFER_BIT); // …Run Code Online (Sandbox Code Playgroud) int width, height;
BYTE * data;
FILE * file;
// open texture data
file = fopen( filename, "rb" );
if ( file == NULL ) return 0;
// allocate buffer
width = 256;
height = 256;
data =(BYTE*) malloc( width * height * 3 );
// read texture data
fread( data, width * height * 3, 1, file );
fclose( file );
glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );
//gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, data ); …Run Code Online (Sandbox Code Playgroud) 下面的代码在OpenGL中绘制迷宫或迷宫,结果是2D迷宫,我现在需要做的是绘制立方体而不是这些四边形,我该怎么做?
function drawmaze() {
int x,y,dl;
glNewList(dl=glGenLists(1),GL_COMPILE);
glPushAttrib(GL_TEXTURE_BIT | GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glColor3f(1.0f,1.0f,1.0f);
glBegin(GL_QUADS);
// glPushMatrix();
float i = 0;
for(y=0;y < mazedata.size();y++) {
for(x=0;x < mazedata[y].size();x++) {
bool dibujar = false;
if(wall(x,y)) {
glColor3ub(46,151,208);
drawable = true;
}
else
if (entry(x,y)) {
glColor3f(0.0f,0.184f,0.792f);
drawable = true;
}
else
if (mazexit(x,y)) {
glColor3f(0.811f,0.188f,0.176f);
drawable = true;
}
else
if (thing(x,y)) {
glColor3ub( 151, 204, 0 );
drawable = true;
}
else
if (visited(x,y)) {
glColor3ub( 66, 66, 66 );
drawable …Run Code Online (Sandbox Code Playgroud) 我试图了解glFrustum()在OpenGL中创建的投影矩阵,以及将其转换为x = [-1,1],y = [-1,1]和z = [-1的规范化设备坐标的转换,1]和发生的一系列4x4矩阵乘法,得出的投影矩阵为
我知道最终结果(在NDC中)是通过应用连续变换后除以w分量获得的,但是那些连续变换又是什么呢?
那就是表达式中的矩阵T(就近,远,左,右,上,下变量而言)
这样每个T仅代表scale,平移,旋转或剪切运算/变换?
我读了一些有关OpenGL LH或RH的文章,以及Projection Matrix教程,但是我对正在进行的基本操作(例如,缩放,平移,旋转或剪切操作)仍然不了解。
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//set viewpoint
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(VIEW_ANGLE,Screen_Ratio,NEAR_CLIP,FAR_CLIP);
gluLookAt(0,5,5, 0,0,0, 0,1,0);
//transform model 1
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(Theta, 0,1,0);
//draw model 1
glBegin(GL_QUADS);
...
glEnd();
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但有没有办法删除对gluPerspective的调用?
我的意思是,我想在初始化时只调用一次,而不是在每次渲染期间重复调用.