标签: glsl

是否可以将我的3D模型(dae/blend/3ds/...)转换/导出到GLSL ES 2.0中?

是否可以将我的3D模型导出或转换为GLSL ES 2.0?对于像Blender/3DS MAX/Maya这样创建GLSL ES 2.0代码的编辑程序,是否有任何转换器或任何导出工具/插件?

我想在上面提到的任何编辑器中方便地创建我的模型,然后我想将它们导出/转换为GLSL ES 2.0.

我已经有一个显示着色器的模板WebGL代码.我想用转换器或导出工具自动创建的GLSL ES代码替换片段着色器和顶点着色器部件.

我想做这样的事情(但对于GLSL ES 2.0): Blender到GLSL

3d graphics opengl-es glsl blender

-1
推荐指数
1
解决办法
1307
查看次数

OpenGL版本问题

我正在使用OpenGL,并且我正在使用的版本存在一些问题.当我检查我的版本时glGetString(GL_VERSION),我得到"4.2.0 - Build 10.18.10.3574".我有以下问题:

  1. 在一种方法中,我使用固定管道进行渲染,但我知道从OpenGL 3.1中删除了对固定管道的支持,那么我的代码如何与4.2一起工作?我使用的API一样glTranslatef(),glMatrixMode(GL_PROJECTION).我认为这些都已弃用,仅适用于OpenGL 1.1.那么当我将上下文字符串作为OpenGL 4.2时,代码是如何工作的?我想我必须使用OpenGL 1.1,但为什么上下文版本是4.2?

  2. 当我使用着色器时,我使用以下代码创建3.1或更高版本的上下文.我使用的着色器是旧的着色器,它与OpenGL 2.0兼容,并且具有"属性","变化"等关键字,不应与OpenGL 3.1或更高版本一起使用.我应该将我的着色器更新为OpenGLSL 3.1,比如使用"in","out"等.还有一些不赞成的东西,比如GL_LINE_SMOOTH_HINT,glMatrixMode(GL_PROJECTION).我认为这些东西已经从OpenGL 3.0中弃用了.那么这些东西如何与GL上下文3.1及更高版本一起使用?

创建上下文3.1或更高版本的代码

if ( 0 == (m_tempContext = ::wglCreateContext( m_pDC->GetSafeHdc() ) ) )
{
    AfxMessageBox(_T("wglCreateContext failed."));
    return FALSE;
}
if ( FALSE == ::wglMakeCurrent( m_pDC->GetSafeHdc(), m_tempContext ) )
{
    AfxMessageBox(_T("wglMakeCurrent failed."));
    return FALSE;
}
int attribs[] =
{
    WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
    WGL_CONTEXT_MINOR_VERSION_ARB, 1,
    WGL_CONTEXT_FLAGS_ARB, 0,
    0
};

if(wglewIsSupported("WGL_ARB_create_context") == 1)
{
m_hRC = wglCreateContextAttribsARB(m_pDC->GetSafeHdc() ,0, attribs); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl

-1
推荐指数
1
解决办法
113
查看次数

在GLSL 1.30上编译片段着色器时出错

以下片段着色器有什么问题?它可以在GLSL 4.0下编译正常,但在GLSL 1.30上失败。

这是代码:

// Fragment Shader
"uniform sampler2D texture;\n"
"uniform sampler1D cmap;\n"
"uniform float minZ;\n"
"uniform float maxZ;\n"
"\n"
"void main() {\n"
"    float height = texture2D(texture,gl_TexCoord[0].st);\n"
"    float lum = (height-minZ)/(maxZ-minZ);\n"
"    if (lum > 1.0) lum = 1.0;\n"
"    else if (lum < 0.0) lum = 0.0;\n"
"    gl_FragColor = texture1D(cmap, lum);\n"
"}"
Run Code Online (Sandbox Code Playgroud)

这些是错误:

FRAGMENT glCompileShader "" FAILED
FRAGMENT Shader "" infolog:
0:7(2): error: initializer of type vec4 cannot be assigned to variable of type float
0:8(2): …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl

-1
推荐指数
1
解决办法
1008
查看次数

带有“没有为构造构造函数提供足够数据”的平凡着色器

我有一个相当简单的顶点着色器:

#version 330 core

layout (location = 0) in vec2 position;
layout (location = 1) in vec2 uvCoord;

uniform mat4 view;
uniform mat4 projection;

out vec2 _uvCoord;

void main()
{
  gl_Position = projection * view * vec4(position, 1.0);
  _uvCoord = uvCoord;
}
Run Code Online (Sandbox Code Playgroud)

这是给出错误:

ERROR: 0:13: error(#174) Not enough data provided for construction constructor
ERROR: error(#273) 1 compilation errors.  No code generated
Run Code Online (Sandbox Code Playgroud)

我曾尝试在谷歌上搜索导致此类错误的原因,但无济于事。失败了,我仔细查看了着色器代码,但据我所知,它没有问题。

是什么导致了这种错误,我该如何修复这个着色器?

opengl glsl

-1
推荐指数
1
解决办法
3198
查看次数

为什么我的纹理映射与我的片段着色器在纹理坐标跳跃时生成线?

我在将等距柱状图全景图像映射到简单平面上时遇到了很多麻烦。到目前为止,我的映射是正确的,所以一切都准确地显示在它应该的位置。但我的问题是,在我的纹理坐标从 1 跳到 0 的地方有一条线。但那条线不仅仅是一些线。它的像素比普通像素大一倍。我将它直接渲染到我的屏幕上,中间没有帧缓冲区。我试图启用多重采样,但它根本不影响那条线。我也试图通过将它隐藏在我的相机后面来摆脱那条线,但后来我意识到当我抬头时,无论我在哪里转动它,总会有这条线。在我的代码中,当我使用例如“if”或“atan”进行纹理坐标跳转时,总是显示这一行。

问题的图像

java opengl textures glsl fragment-shader

-1
推荐指数
1
解决办法
203
查看次数

哪个OpenGL版本是第一个支持统一结构阵列的?

我想在glsl中使用Light结构,并将它们的数组定义为一个统一变量,如下所示:

uniform Light lights[LIGHT_NUM];
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法找到使用此功能的OpenGL/glsl/GL ES版本.

opengl opengl-es glsl glsles

-3
推荐指数
1
解决办法
76
查看次数

标签 统计

glsl ×6

opengl ×5

c++ ×2

opengl-es ×2

3d ×1

blender ×1

fragment-shader ×1

glsles ×1

graphics ×1

java ×1

textures ×1