首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gluLookAt故障

gluLookAt故障
EN

Stack Overflow用户
提问于 2012-01-10 23:26:52
回答 1查看 1.6K关注 0票数 1

我有一些代码,它沿着x,y和z轴画一条线。我的问题是,这些线被剪掉了,所以它们在原点附近是看不见的:

这听起来像一个远剪裁的飞机问题,但我把zFar=50给了gluPerspective,这应该足够了。把它弄得更大似乎没什么用。还有什么能引起剪裁的?

这是我的代码:

代码语言:javascript
复制
import static org.lwjgl.opengl.GL11.*;

import org.lwjgl.opengl.*;
import org.lwjgl.util.glu.GLU;

public class Test {
    static int width = 300, height = 200;

    public static void main(String[] _) throws Exception {
        Display.setDisplayMode(new DisplayMode(width, height));
        Display.create();
        glClear(GL_COLOR_BUFFER_BIT);

        // projection matrix
        glMatrixMode(GL_PROJECTION_MATRIX);
        glLoadIdentity();
        GLU.gluPerspective(50, width / (float) height, .1f, 50);

        // modelview matrix
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        GLU.gluLookAt(
                .8f, .8f, .8f,
                0, 0, 0,
                0, 1, 0);

        // draw a line for each axis
        glBegin(GL_LINES);
            // x axis in red
            glColor3f(1, 0, 0);
            glVertex3i(0, 0, 0);
            glVertex3i(10, 0, 0);
            // y axis in green
            glColor3f(0, 1, 0);
            glVertex3i(0, 0, 0);
            glVertex3i(0, 10, 0);
            // z axis in blue
            glColor3f(0, 0, 1);
            glVertex3i(0, 0, 0);
            glVertex3i(0, 0, 10);
        glEnd();

        Display.update();

        // wait for a close event
        while (!Display.isCloseRequested()) {
            Thread.sleep(20);
            Display.processMessages();
        }
        Display.destroy();
    }
}

Update -在glMatrixMode(GL_MODELVIEW);之后删除glLoadIdentity();,但我不明白为什么。默认的模型视图矩阵不是恒等矩阵吗?

更新--我编写了相同代码的C版本,它按需要工作。为什么会有区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-13 09:25:15

实际上,在测试了它之后,结果证明glMatrixMode(GL_PROJECTION_MATRIX);应该是glMatrixMode(GL_PROJECTION);

因此,模型视图在默认情况下似乎是活动的,并且glLoadIdentity()清除了GLU.gluPerspective(50, width / (float) height, .1f, 50);的结果。

编辑:顺便说一下。如果您想知道GL_PROJECTION_MATRIX的作用是什么,它将使用glGetFloatv(GL_PROJECTION_MATRIX,output);glGetDoublev(GL_PROJECTION_MATRIX,output);从矩阵堆栈的顶部检索当前的矩阵

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8812084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档