gpt4 book ai didi

java - 在opengl中在矩形窗口上绘制正方形

转载 作者:行者123 更新时间:2023-11-30 05:36:00 31 4
gpt4 key购买 nike

我正在LWJGL 3中绘制一个3D立方体。它在窗口大小为600 * 480的情况下渲染得很好。它渲染了一个完美的立方体。

但是如果我将窗口的宽度增加到 900 而高度保持不变。立方体具有矩形形状。

在 640 * 480 分辨率下,立方体的正面为:

在 900 * 480 分辨率下,立方体的正面是:

我想渲染一个完美的正方形,但它不像矩形。

如果需要的话,渲染循环如下:

private void loop() {

GL.createCapabilities();

// Set the clear color
glClearColor(0f, 0.0f, 0.0f, 0.0f);

float x = 0.5f;
float y = 0.5f;
float z = 0.5f;
float[] vertices = new float[] {
// VO
-x, y, z,
// V1
-x, -y, z,
// V2
x, -y, z,
// V3
x, y, z,
// V4
-x, y, -z,
// V5
x, y, -z,
// V6
-x, -y, -z,
// V7
x, -y, -z, };

float[] colours = new float[] {
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f,
0.0f, 0.0f, 0.5f,
0.0f, 0.5f, 0.5f,
0.5f,0.0f, 0.0f,
0.0f, 0.5f, 0.0f,
0.0f, 0.0f, 0.5f,
0.0f, 0.5f, 0.5f, };

int[] indices = new int[] {
// Front face
0, 1, 3, 3, 1, 2,
// Top Face
4, 0, 3, 5, 4, 3,
// Right face
3, 2, 7, 5, 3, 7,
// Left face
6, 1, 0, 6, 0, 4,
// Bottom face
2, 1, 6, 2, 6, 7,
// Back face
7, 6, 4, 7, 4, 5, };

RawModel model = Loader.loadRawModel(vertices, indices, colours);
ShaderProgram shader = null;

Transformation transformation = new Transformation();

try {

shader = new ShaderProgram(Utils.loadTextFile("src/shaders/vertexShader.txt"),
Utils.loadTextFile("src/shaders/fragmentShader.txt"));
shader.link();
shader.createUniform("projectionMatrix");
shader.createUniform("worldMatrix");
} catch (Exception e) {
e.printStackTrace();
}

float rotation = 0;


while (!glfwWindowShouldClose(window)) {
glEnable(GL11.GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

shader.bind();

shader.setUniform("projectionMatrix", transformation.getProjectionMatrix((float) Math.toRadians(60),
(float) (width / height), 0.1f, 1000f));
shader.setUniform("worldMatrix", transformation.getWorldMatrix(new Vector3f(0, 0, -3f),
new Vector3f(rotation, rotation, rotation), 1));
model.render();

shader.unBind();

glfwSwapBuffers(window);
glfwPollEvents();
}

shader.dispose();
Loader.dispose();
}

最佳答案

感谢@Derhass,问题现在已经解决了。问题是我将长宽比计算为:

float aspectRatio = (float)(900/480);

等于1.0f

但是当我将 f 添加到宽度和高度时:

float aspectRatio = (float)(900f/480f);

它给出了正确的aspectRatio,即1.875

现在立方体显示为正方形。

the cube image now :

关于java - 在opengl中在矩形窗口上绘制正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56609440/

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