Articles of glsl

转换HSLS给出错误

我正在使用以下parsing器: https : //github.com/unknownworlds/hlslparser 我也有以下代码: /* * Bo Sun, Columbia University, All rights reserved * ——————————————————————– * Permission to use, copy, or modify this software and its documentation * for educational and research purposes only and without fee is hereby * granted. * ——————————————————————– * * March. 2005 */ struct frag2app { float4 color : […]

GLSurfaceView中的透明度

我是游戏开发新手。 我有一个使用GLSurfaceview和MainActivity调用的视图。 我想使透明的观点。 我已经尝试在MainActivity和glClearColor()setZOrderOnTop()方法,但都不工作。 public class RubikActivity extends Activity { cubeView cv; GLSurfaceView gv; @SuppressLint("NewApi") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); cv = (cubeView) findViewById(R.id.cubeView); cv.initialize(PreferenceManager.getDefaultSharedPreferences(this)); cv.requestFocus(); cv.setFocusableInTouchMode(true); cv.setEGLConfigChooser(8, 8, 8, 8, 8,0); // cv.setRenderer( new CubeRenderer(getApplicationContext(), font, mWorld, rCube, mMenu, prefs); cv.getHolder().setFormat(PixelFormat.TRANSLUCENT); cv.setZOrderOnTop(true); } cubeView.java public cubeView(Context context, AttributeSet attrs) { super(context, […]

WebGL的半浮动equivelant?

我试图find一个half float的目的是做一个片段着色器的math,而不是尝试有一个半浮动纹理。 在WebGL中是否有相当于half float数据types? 我知道你可以创建一个lowp浮点数,但是是相同的,还是不一定?

glsl镜面不工作

好吧,我是一个关于着色器和所有这一切完整的小白,所以我必须做一些非常愚蠢的事情,但我不能得到镜面照明工作。 我在互联网上阅读了很多不同的着色器,并且有许多不同的着色器和不同的制服。 这是我的… 顶点着色器 #version 300 es in vec3 VertexPosition; in vec3 VertexNormal; in vec2 TexCoord; struct SInputUniforms { mat4 ViewMatrix; mat4 ModelViewProjectionMatrix; mat4 ModelWorldMatrix; vec3 CameraPosition; }; struct SVertexToFrag { vec3 WorldFragPosition; vec3 WorldVertexNormal; vec2 TexCoord; }; uniform SInputUniforms InputUniforms; out SVertexToFrag VertexToFrag; void main() { gl_Position = InputUniforms.ModelViewProjectionMatrix * vec4(VertexPosition, 1.0); VertexToFrag.TexCoord = […]

设置渲染目标的使用

我正在使用Unity,并且在理解“设置渲染目标”的工作方式以及如何使用着色器时遇到一些困难。 是否有可能在多个渲染目标中渲染着色器通道? 怎么样 ? 由于这种行为似乎与所有的渲染平台,而不仅仅是团结,任何帮助是值得欢迎的。 谢谢 !

转换glsl着色器

我需要将这些着色器从#version 400核心转换成#version 130成功,但由于某种原因,当我这样做时,我的模型不能正确呈现时,我加载多一个types,我找不到任何其他问题与我的代码 版本400(vertexShader): #version 400 core in vec3 position; in vec2 textureCoords; in vec3 normal; out vec2 pass_textureCoords; out vec3 surfaceNormal; out vec3 toLightVector; out vec3 toCameraVector; out float visibility; uniform mat4 transformationMatrix; uniform mat4 projectionMatrix; uniform mat4 viewMatrix; uniform vec3 lightPosition; uniform float useFakeLighting; uniform vec2 offset; const float density = 0.004; const […]

为什么这个function不起作用? glsl opengl c ++

我试图将转换matrix移动到GPU上,我设法find这个代码来帮助我: vertex.shader: #version 410 core layout ( location = 0 ) in vec3 vertex_position ; mat4 rotationMatrix(vec3 axis, float angle) { axis = normalize(axis); float s = sin(angle); float c = cos(angle); float oc = 1.0 – c; return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y – axis.z * s, […]

sf :: Shader在纹理上不能正常工作

我无法让我的sf :: Shader工作在我自己绘制的sf :: Texture上。 顶点着色器是非常标准的(我认为这只是从SFML页面的例子的副本)。 片段着色器来自他们的论坛中的某个地方,我是glsl的新手,但是我的理解是它需要一个vec3的光照位置(我使用鼠标位置),然后计算距离片段的距离(来自其他着色器?),然后使用它来确定事情应该是如何光明/黑暗。 它对我绘制的矩形形状非常有效,但是当我尝试使用sf :: Texture时,无论它在哪里,它都会显示出来。 但是 – 当光线向它移动时,它会变得更轻(当光线变得更远时,不会变暗/消失)。 下面是它不应该显示的纹理: 在imgur.com上查看文章 当光线靠近它时,纹理就会变得非常明亮: 在imgur.com上查看文章 这是我的顶点着色器: uniform sampler2D texture; void main() { // transform the vertex position gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; // transform the texture coordinates gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; // forward the vertex color gl_FrontColor = gl_Color; } 这是我的片段着色器: uniform […]

使用gl_FragCoord访问纹理元素时出现奇怪的工件

我遇到了使用gl_FragCoordvariables访问纹理gl_FragCoord的问题。 这个问题可以用下面的例子来说明: 首先,我将纹理四边形渲染成尺寸为(W, H)纹理,其中W和H是视口的宽度和高度。 然后我在(0, 0)和(W, H)右上角画左下角的另一个四边形(这样它实际上占据了整个视口),这个纹理是用这个纹理纹理化的。 我们称之为四A。 然后,我在另一个四边形(我们称之为四B ),在(0, H1)左下角和(W, H)右上角,也使用相同的纹理。 整个场景可以用这张图来说明: 正如你所看到的,第一个四边形的底部部分在四边形中,而在四边形中的顶部部分。 因此,当我尝试片段着色器的四B,我可以看到是否顶部的四重奏部分匹配底部。 现在来解决这个问题: 当我在片段着色器四B使用 gl_FragColor = texture2D(u_backgroundTexture, v_texCoord); ( v_texCoord为v_texCoord的(0,0),右上角为(1,1) 确定片段颜色,一切都很好。 第一个四边形的顶部和底部完美匹配: 但是,当我将此行更改为: gl_FragColor = texture2D(u_backgroundTexture, gl_FragCoord.xy / u_resolution); (其中u_resolution是一个vec2(W, H) ) 四边形的顶部和底部不再匹配。 如果我在靠近屏幕右边缘的位置渲染四边形,我会得到下面的工件: 如果我把它靠近左边的工件看起来像这样: 任何人都可以请解释什么是这种文物可能的原因? 显然我缺less一些纹理工作的基本理解,因为在我看来, texture2D(u_backgroundTexture, v_texCoord)应该完全等价于texture2D(u_backgroundTexture, gl_FragCoord.xy / u_resolution); 在我的情况。 PS显然,对于四A我总是在片段着色器中使用gl_FragColor = texture2D(u_backgroundTexture, v_texCoord) 。

皮肤网格animation着色器问题

我正在从一个.fbx文件正确animation皮肤网格的麻烦。 我觉得这个问题是在着色器,但不知道是怎么回事。 我所知道的是,我正在得到意想不到的结果,感觉就像我提供了所有正确的信息。 如果我在所有位置使用单个骨骼而不是在布局位置传递的位置,则会将顶点放在正确的位置,所以计算是正确的。 从一切的外表来看,我的骨骼计算是正确的,加载骨骼,重量加载得很好,但似乎他们不保留它们的价值。 看起来似乎正在发生:BoneIDS和/或BoneWeights正被归零或设置为别的东西。 以供参考: typedef struct sFloat4 { float x, y, z, w; } sFloat4; typedef struct sInt4 { int x, y, z, w; } sInt4; typedef struct sVertex_p4t4n4b4i4 { sFloat4 Pos; sFloat4 TexUVx2; sFloat4 Normal; sInt4 BoneIDs; sFloat4 BoneWeights; } sVertex_p4t4n4b4i4; 和 unsigned int totalVertBufferSizeBYTES = numIndicesInIndexArray * sizeof ( sVertex_p4t4n4b4i4 […]