当前位置: 首页 > 面试题库 >

在OSX的OpenGL 2.1中未绘制三角形

毕嘉
2023-03-14
问题内容

我正在学习有关使用OpenGL在Java中创建游戏引擎的教程。

我正在尝试在屏幕上渲染一个三角形。一切运行正常,我可以更改背景颜色,但三角形不会显示。我也尝试过运行作为教程系列的一部分提供的代码,但仍然无法正常工作。

链接至教程:http :
//bit.ly/1EUnvz4

链接到视频中使用的代码:http :
//bit.ly/1z7XUlE

建立

  • 我试过检查OpenGL版本,但相信我有2.1。
  • Mac OSX
  • Java-Eclipse

Mesh.java

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL15.*;
import static org.lwjgl.opengl.GL20.*;

public class Mesh
{
    private int vbo;    //pointer to the buffer
    private int size;   //size of the data to buffer

    public Mesh ()
    {
        vbo = glGenBuffers();
        size = 0;
    }

    public void addVertices (Vertex[] vertices)
    {
        size = vertices.length;

        //add the data by first binding the buffer
        glBindBuffer (GL_ARRAY_BUFFER, vbo);    //vbo is now the buffer
        //and then buffering the data
        glBufferData (GL_ARRAY_BUFFER, Util.createFlippedBuffer(vertices), GL_STATIC_DRAW);
    }

    public void draw ()
    {
        glEnableVertexAttribArray (0);  //divide up the data into a segment

        glBindBuffer (GL_ARRAY_BUFFER, vbo);    //vbo is now the buffer
        //tell OpenGL more about the segment:
        //segment = 0, elements = 3, type = float, normalize? = false, vertex size, where to start = 0)
        glVertexAttribPointer(0, 3, GL_FLOAT, false, Vertex.SIZE * 4, 0);

        //draw GL_TRIANGLES starting from '0' with a given 'size'
        glDrawArrays (GL_TRIANGLES, 0, size);

        glDisableVertexAttribArray (0);
    }
}

RenderUtil.java

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL30.*;

public class RenderUtil
{
    public static void clearScreen ()
    {
        //TODO: Stencil Buffer
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    }

//set everything to engine defaults
public static void initGraphics ()
{
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);   // default color

    glFrontFace(GL_CW);         // direction for visible faces
    glCullFace(GL_BACK);        // direction for back faces
    glEnable (GL_CULL_FACE);    // don't draw back faces
    glEnable (GL_DEPTH_TEST);   // determines draw order by pixel depth testing

    //TODO: Depth clamp for later

    glEnable (GL_FRAMEBUFFER_SRGB); // do exponential correction on gamma so we don't have to
}
}

实用程序

import java.nio.FloatBuffer;
import org.lwjgl.BufferUtils;

public class Util
{
    //create a float buffer (we need this because java is weird)
    public static FloatBuffer createFloatBuffer (int size)
    {
        return BufferUtils.createFloatBuffer(size);
    }

    //flip the buffer to fit what OpenGL expects
    public static FloatBuffer createFlippedBuffer (Vertex[] vertices)
    {
        FloatBuffer buffer = createFloatBuffer(vertices.length * Vertex.SIZE);

        for (int i = 0; i < vertices.length; i++)
        {
            buffer.put(vertices[i].getPos().getX());
            buffer.put(vertices[i].getPos().getY());
            buffer.put(vertices[i].getPos().getZ());
        }

        buffer.flip();

        return buffer;
    }
}

问题答案:

您正在使用旧版和现代OpenGL的无效组合。

您要调用的glVertexAttribPointer()glEnableVertexAttribArray()函数用于设置 通用
顶点属性。这是在当前版本的OpenGL(桌面OpenGL或OpenGL ES
2.0及更高版本)中设置顶点属性的唯一方法。它们也可以在旧版OpenGL中使用,但只能与在GLSL中实现的提供自己的着色器结合使用。

如果您只是入门,那么最好的选择可能是继续使用已有的东西,并研究如何开始实现自己的着色器。如果要使代码与旧式固定管道一起使用(仅在OpenGL兼容性配置文件中受支持),则需要使用glVertexPointer()glEnableClientState()函数。



 类似资料:
  • 我是最新版本的OpenGL的新手,我试图通过以下教程来学习它:http://open.gl/drawing 然而,我正在使用LWJGL的最新版本,并尽最大努力将其OpenGL与教程一样使用。然而,应该绘制的白色三角形却不是。 这是我的代码: 我的着色器与本教程的着色器相同,但无论如何都会为了便于阅读而发布它们: 。蓄意杀伤 .vert 代码运行,但都是黑色的。有什么想法吗?

  • 我试图用DXUT11画一个简单的三角形,但是我在窗口中看不到三角形。 我努力工作,但仍然找不到问题所在-_- 我检查了D3D函数的每个返回值,它们都返回了S_OK<我可以看到我的窗口显示出来,背景色是我设置为清除窗口的颜色,因此看起来d3d设备是当前创建的,并且后缓冲区被渲染到窗口,但是黄色三角形在哪里 T\u T。。。。。。。。。。。。。。。 我的代码如下:(为了简化问题,我已经删除了所有的检查

  • 在java中,我有三个点,表示两条线和一个角度。现在我必须创建角度弧大约10个像素,除了公共点。在弧线上显示角度。我可以计算角度,但如何画弧线和显示弧线上的角度。请告诉我一些代码视图或链接,我可以找到解决方案。代码片段如下。 我不知道如何使用DrawArc来绘制我想要的精确的圆弧,也不知道如何在上面设置角度。 谢谢

  • 问题内容: 因此,我在我的draw方法中使用以下代码在Android地图中绘制了这个三角形: pointX_returned是我从字段中获取的坐标。它们基本上是经度和纬度。结果是一个漂亮的三角形,但内部人员为空,因此我可以看到地图。有办法以某种方式填充它吗? 问题答案: 您可能需要执行以下操作: 并将此颜色用于您的路径,而不是ARGB。确保路径的最后一点在第一个点结束,这也很有意义。 告诉我是否可

  • 本文向大家介绍用CSS绘制一个三角形相关面试题,主要包含被问及用CSS绘制一个三角形时的应答技巧和注意事项,需要的朋友参考一下

  • 手指任意点击屏幕三点,绘制三角形。 [Code4App.com]