标签: shader

片段着色器:输出变量

阅读GLSL 1.40规范:

片段输出只能是浮点,浮点矢量,有符号或无符号整数或整数向量,或任何这些的数组.无法输出矩阵和结构.片段输出在以下示例中声明:

out vec4 FragmentColor; out uint Luminosity;

片段颜色定义为写gl_FragColor ...是不是?有人可以清楚我对这些产出的看法吗?我可以只编写示例中的'FragmentColor'来确定片段颜色吗?我可以回读一下(比如'Luminosity')吗?

opengl shader glsl

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

将自己的结构传递给opengl es 2.0着色器

我想尝试一下OpenGL ES 2.0编程指南中的照明示例.在着色器中,他们制作了两个结构.

struct directional_light   
{  

    vec3 direction; // normalized light direction in eye space  
    vec3 halfplane; // normalized half-plane vector  

    vec4 ambient_color;
    vec4 diffuse_color;
    vec4 specular_color;
};

struct material_properties 
{ 
    vec4 ambient_color; 
    vec4 diffuse_color; 
    vec4 specular_color; 
    float specular_exponent;
};
Run Code Online (Sandbox Code Playgroud)

他们还根据这些结构制作了两件制服.

uniform  material_properties u_material_properties;   
uniform directional_light u_directional_light;
Run Code Online (Sandbox Code Playgroud)

问题是,我不知道如何将自己的结构传递给实际的着色器.

我想在我的主代码中创建相同的结构,并将对象传递到着色器.这怎么可能?

关心尼克拉斯

iphone shader opengl-es opengl-es-lighting

10
推荐指数
1
解决办法
6531
查看次数

在着色器中除以0会发生什么?

已知分支在OpenGL ES着色器中特别具有计算成本.在这样的着色器中,我在除以之前检查值是否为null,例如:

if(value == 0.0)
    other_value = 0.0;
else
    other_value = 1.0 / value;
Run Code Online (Sandbox Code Playgroud)

为了加快速度,我想if通过直接做到这一点来避免这种情况:

other_value = 1.0 / value;
Run Code Online (Sandbox Code Playgroud)

我想知道如果value碰巧等于0会发生什么,这在我的治疗中有点罕见,这就是为什么测试它并不容易.着色器是否会崩溃?应用程序崩溃了吗?

iphone shader opengl-es glsl

10
推荐指数
4
解决办法
5749
查看次数

为什么glGetUniformLocation让我失望?

我几天前找到了Gwen,认为它看起来像是我项目的完美GUI工具包.但是哦,亲爱的,看一下渲染器中的所有OpenGL 2代码.所以我以为我会写一个OpenGL 3渲染器,所以我可以实际使用它,但我比CG更熟悉CG而且我已经让自己陷入了编写样本的困境.我想如果我能够设置这些统一变量,它应该基本完成.

着色器编译和链接没有问题.我把它缩小到glGetUniformLocation,为正交矩阵和纹理采样器返回-1,但我不知道为什么它正在这样做.典型的问题似乎是,如果你实际上没有使用它们,它们会被优化出来,但我已经将它们用于两者.

如果有人有任何想法,我会全力以赴.一旦它正常工作,将非常乐意发布/链接完整的东西.这是我对GLSL的第一次尝试,所以我很容易做一些愚蠢的事情.我刚刚完成为另一个项目设置CG,所以我不是完全无能为力.

设置OpenGL上下文后调用Shader Init代码:

void InitializeShaders(void)
{
    g_ShaderProgram = glCreateProgram();
    g_VertexShader = glCreateShader(GL_VERTEX_SHADER);
    g_FragmentShader = glCreateShader(GL_FRAGMENT_SHADER);

    glShaderSource(g_VertexShader, 1, (const GLchar **)&VertexShaderData, 0);
    glShaderSource(g_FragmentShader, 1, (const GLchar **)&FragmentShaderData, 0);

    glCompileShader(g_VertexShader);
    CheckShaderCompile(g_VertexShader);

    glCompileShader(g_FragmentShader);
    CheckShaderCompile(g_FragmentShader);

    glAttachShader(g_ShaderProgram, g_VertexShader);
    glAttachShader(g_ShaderProgram, g_FragmentShader);

    glBindAttribLocation(g_ShaderProgram, 0, "position");
    glBindAttribLocation(g_ShaderProgram, 1, "color");
    glBindAttribLocation(g_ShaderProgram, 2, "texCoord");

    glBindFragDataLocation(g_ShaderProgram, 0, "color");

    glLinkProgram(g_ShaderProgram);
    CheckShaderLink();

    g_OrthoTransformLocation = glGetUniformLocation(g_ShaderProgram, "orthoTransform");
    g_TextureLocation = glGetUniformLocation(g_ShaderProgram, "textureSampler");
}
Run Code Online (Sandbox Code Playgroud)

着色器作为字符串存储在头文件中,但我删除了所有换行符和反斜杠,因此它们看起来不那么痛苦.

顶点着色器:

#version 330

in vec4 position;
out vec4 outPosition;
uniform mat4x4 orthoTransform;
void main(void)
{ …
Run Code Online (Sandbox Code Playgroud)

opengl shader glsl opengl-3

10
推荐指数
1
解决办法
1万
查看次数

如何将.fsh/.vsh着色器文件添加到Xcode中,以便将它们自动添加到Copy Bundle Resources阶段?

每当我将新的.fsh或.vsh OpenGL ES 2.0着色器文件添加到我的项目资源时,该文件就会被添加到不属于它的Compile Sources构建阶段.然后我必须从该阶段手动删除它,并手动将其添加到Copy Bundle Resources构建阶段.

有什么办法可以让Xcode自动将扩展名为.fsh和.vsh的文件添加到Copy Bundle Resources构建阶段吗?

或者是否可以创建与将着色器添加到Copy Bundle Resources构建阶段具有相同效果的构建规则?

我更喜欢一个适用于Xcode项目/工作区的所有用户的解决方案,而不是每个Xcode用户必须单独播放的设置或系统更改.

resources shader bundle xcode4

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

GLSL - 不推荐使用texture1D,而是使用什么?

我正在为#version 130(OpenGL 3.0)编写一个GLSL着色器

它发出警告"在120版之后不推荐使用全局函数texture1D"

我用谷歌搜索但找不到多少.如果它过时了,那么什么应该我是使用提供类似的功能?

opengl shader glsl opengl-3

10
推荐指数
1
解决办法
3979
查看次数

Three.js - 问题在自定义几何体上平滑着色Lambert材质

我在Three.js中创建了一个自定义几何体.现在,我想创建一个使用光滑阴影Lambert材质的网格.使用循环,我创建了顶点数组,然后是面,然后我调用了

geometry.computeCentroids();
geometry.computeFaceNormals();
geometry.computeVertexNormals();

var colorMaterial =  new THREE.MeshLambertMaterial( {color: 0x0000ff, side: THREE.DoubleSide} );
var mesh = new THREE.Mesh( geometry, colorMaterial );
scene.add(mesh);
Run Code Online (Sandbox Code Playgroud)

结果几乎是完美的,除了看起来好像材料正在使用shading: THREE.FlatShading,如下所示:

在此输入图像描述

虽然我期待一个人通常期望的默认外观shading: THREE.SmoothShading.我需要添加/更改以获得平滑的Lambert着色?

(如果有帮助,一个完整的实例是http://stemkoski.github.io/Three.js/Marching-Cubes.html,几何和网格是围绕250-280行创建的.)

javascript shader webgl three.js

10
推荐指数
1
解决办法
5819
查看次数

FXC:错误X3501:'main':找不到入口点

我正在关注一本名为" DirectX 11的3D游戏编程简介"的示例书

它全部用VS2010编写.我想尝试使用VS2013 ......这是Windows桌面程序的示例项目

我有一个程序包含以下内容(包括一些其他文件作为常用的一部分):

color.fx

//***************************************************************************************
// color.fx by Frank Luna (C) 2011 All Rights Reserved.
//
// Transforms and colors geometry.
//***************************************************************************************

cbuffer cbPerObject
{
    float4x4 gWorldViewProj; 
};

struct VertexIn
{
    float3 PosL  : POSITION;
    float4 Color : COLOR;
};

struct VertexOut
{
    float4 PosH  : SV_POSITION;
    float4 Color : COLOR;
};

VertexOut VS(VertexIn vin)
{
    VertexOut vout;

    // Transform to homogeneous clip space.
    vout.PosH = mul(float4(vin.PosL, 1.0f), gWorldViewProj);

    // Just pass vertex color into the …
Run Code Online (Sandbox Code Playgroud)

c++ directx shader hlsl visual-studio-2013

10
推荐指数
2
解决办法
3万
查看次数

3D地图渲染在游戏中

我对3D游戏中的地图(即魔兽世界)以及程序员如何渲染它们有一些疑问,所以我不应该为每个人打开一个帖子,我想我应该在一个地方问他们所有人.

  1. 是否有可能通过某种技术"平滑"山脉的边缘,或唯一可能的解决方案是在高度图中使用更多的顶点? 在此输入图像描述 我错了,并认为他们使用某种技术,因为他们只是为每座山提供了相当数量的顶点?

  2. 看一下这张图片:http: //wow.gamona.de/wp-content/gallery/dun-morogh/dun_morogh_008.jpg 关于如何渲染这种场景的一些问题:

    1. 正如我被告知像WoW这样的开放世界游戏使用高度图进行地形渲染时,他们如何知道在哪里绘制所有其他东西?(树木,房屋,围栏,水等).
    2. 他们如何渲染地下区域?(山内有一座巨大的城堡)
    3. 请注意,每个凹凸使用大约2个纹理作为其显示(雪和岩石).他们用什么算法来知道何时采样每个纹理?它看起来不像它取决于法线.(我认为他们甚至不会为他们的地形生成法线.)
    4. 它看起来也不像天空盒用于地平线.它可以是什么技术?
    5. 你能说出你注意到我可以探索的其他有趣技巧吗?

我目前正在学习OpenGL,但我也标记了DirectX,因为这些问题并不是特定于API的.

opengl directx shader textures terrain

10
推荐指数
1
解决办法
1746
查看次数

在Unity中使用Shell技术实现Fur

我正在尝试使用Shells技术在Unity中实现毛发.Fins技术是故意遗漏的,因为我希望它在低端手机(主要是Android设备)上运行,并且需要OpenGL ES 3.0及更高版本,而Shells技术只需要OpenGL ES 2.0.

有一个基于XNA的Shell技术的例子,我试图将它移植到Unity但它无法工作.是XNA项目的文章.

XNA着色器:

float4x4 World;
float4x4 View;
float4x4 Projection;

float CurrentLayer; //value between 0 and 1
float MaxHairLength; //maximum hair length

texture FurTexture;
sampler FurSampler = sampler_state
{
    Texture = (FurTexture);
    MinFilter = Point;
    MagFilter = Point;
    MipFilter = Point;
    AddressU = Wrap;
    AddressV = Wrap;
};


struct VertexShaderInput
{
    float3 Position : POSITION0;
    float3 Normal : NORMAL0;
    float2 TexCoord : TEXCOORD0;
};

struct …
Run Code Online (Sandbox Code Playgroud)

c# shader xna unity-game-engine shaderlab

10
推荐指数
1
解决办法
991
查看次数