相关疑难解决方法(0)

OpenGL ES - 虚线

我使用OpenGlEs10进行我的Android游戏开发,我想绘制虚线现在我正在使用此代码绘制我的线:

        gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
        // gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
        gl.glLineWidth(4.0f);
        gl.glVertexPointer(2, GL10.GL_FLOAT, 0, mBufDestVertices);
        gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, mDesPoly.getNumPoints());
Run Code Online (Sandbox Code Playgroud)

我该如何改变它?我必须纹理线吗?如果是这样,怎么样?

android opengl-es

5
推荐指数
1
解决办法
748
查看次数

OpenGL3中的虚线?

我目前正在移植一个旧的OpenGL 1.1应用程序,该应用程序使用线框模型到OpenGL 3.0。

在1.1中,以下代码用于创建虚线:

glPushAttrib(GL_ENABLE_BIT); 
glLineStipple(1, 0x0F0F);
glEnable(GL_LINE_STIPPLE);
Run Code Online (Sandbox Code Playgroud)

通常,这里将参数压入堆栈,以影响随后的所有绘制操作。

我的问题:在不再使用该堆栈的OpenGL3中如何做到这一点?如何设置虚线(可能在将坐标移交给glBufferData()之前)?

opengl glsl opengl-3 opengl-1.x

5
推荐指数
1
解决办法
422
查看次数

如何在C++字体库中支持不同的OpenGL版本/扩展

我计划重写一个小的C++ OpenGL字体库我使用FreeType 2做了一段时间,因为我最近发现了对更新的OpenGL版本的更改.我的代码使用立即模式和一些函数调用我很确定现在已经弃用了,例如glLineStipple.

我非常希望支持一系列OpenGL版本,以便代码在可能的情况下使用例如VBO,或者在没有其他可用的情况下退回到立即模式等等.我不知道怎么回事.Afaik,您无法进行编译时检查,因为您需要在运行时创建有效的OpenGL上下文.到目前为止,我已经提出了以下建议(灵感来自其他线程/网站):

  • 使用GLEW在绘图函数中进行运行时检查并检查功能支持(例如glLineStipple)

  • 使用一些可以在编译时指定的#define和其他预处理程序指令来编译可以使用不同OpenGL版本的不同版本

  • 编译支持不同OpenGL版本的不同版本,并将每个版本作为单独的下载提供

  • 使用脚本(Python/Perl)发送库,该脚本检查系统上的OpenGL版本(如果可能/可靠)并对源进行适当的修改,使其适合用户的OpenGL版本

  • 仅针对较新的OpenGL版本,并放弃对以下任何内容的支持

无论如何我可能会使用GLEW来轻松加载扩展.

后续行动: 根据您非常有用的答案,我试图根据我的旧代码添加几行,这里是一个片段(没有测试/完成).我在config头中声明了相应的函数指针,然后在初始化库时,我尝试获得正确的函数指针.如果VBO失败(指针为null),我会回到显示列表(不推荐使用3.0),最后回到顶点数组.如果是fx,我应该(也许?)检查可用的ARB扩展名.VBO无法加载或太多工作?这会是一个坚实的批评吗?评论赞赏:)

#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
    #define OFL_WINDOWS
    // other stuff...
    #ifndef OFL_USES_GLEW
        // Check which extensions are supported
    #else
        // Declare vertex buffer object extension function pointers
        PFNGLGENBUFFERSPROC          glGenBuffers          = NULL;
        PFNGLBINDBUFFERPROC          glBindBuffer          = NULL;
        PFNGLBUFFERDATAPROC          glBufferData          = NULL;
        PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = NULL;
        PFNGLDELETEBUFFERSPROC       glDeleteBuffers       = NULL;
        PFNGLMULTIDRAWELEMENTSPROC   glMultiDrawElements   = NULL;
        PFNGLBUFFERSUBDATAPROC       glBufferSubData       = NULL;
        PFNGLMAPBUFFERPROC           glMapBuffer           = NULL;
        PFNGLUNMAPBUFFERPROC         glUnmapBuffer         = NULL;
    #endif
#elif some_other_system
Run Code Online (Sandbox Code Playgroud)

初始化功能: …

c++ opengl

2
推荐指数
1
解决办法
1318
查看次数

标签 统计

opengl ×2

android ×1

c++ ×1

glsl ×1

opengl-1.x ×1

opengl-3 ×1

opengl-es ×1