gpt4 book ai didi

java - 为什么这不想绘制多次?

转载 作者:行者123 更新时间:2023-11-30 04:44:33 24 4
gpt4 key购买 nike

我正在学习 opengl,我想绘制 50 个纹理(从一个变量),这就是我所做的: 在更新方法中:

public void update(){
while(!Display.isCloseRequested()){
input();
for(int x = 0; x< 100; x++){
block = new GrassBlock(x*32,10);
block.draw();
}
Display.update();
Display.sync(60);
}
}

这就是我初始化 openGL 的方式:

    private void initGL(){
glEnable(GL_TEXTURE_2D);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glViewport(0, 0,640 , 480);
glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,640 , 480, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
}

这是 GrassBlock 绘制方法:

@Override
public void draw() {
grass.bind();
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(100, 100);
glTexCoord2f(1, 0);
glVertex2f(100+grass.getTextureWidth(),100);
glTexCoord2f(1,1);
glVertex2f(100+grass.getTextureWidth(),100+grass.getTextureHeight());
glTexCoord2f(0,1);
glVertex2f(100,100+grass.getTextureHeight());
glEnd();
}

另外,我知道我不能将 block 创建放在更新方法中,因为它会循环,但是我如何解决可以从一个变量绘制多个纹理的问题?

现在我只有一个,而且它总是闪烁。

最佳答案

您可能忘记清除深度缓冲区

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
^^^^^^^^^^^^^^^^^^^^^

此外,initGL 中的所有代码实际上都属于重绘函数的开头。视口(viewport)的尺寸应通过向图形系统请求窗口的大小来获取。

glViewport(0, 0,640 , 480);
glMatrixMode(GL_MODELVIEW); <<<<<<<<
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

切换到模型 View 矩阵不会执行任何操作,因为您会立即切换回投影。

最好在绘图函数开始时将所有矩阵重置为恒等式,以启动众所周知的状态。

关于java - 为什么这不想绘制多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11374084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com