在XNA 4.0中用简单的着色器使精灵变白(alpha问题)。
在 tint sprite白色和 sprite spres sampam sampam ,我已经将.FX文件加载到了示例项目中,并在使用美白效果的一个draw()调用中替换了示例效果之一. 我得到的是一个与纹理本身相同的尺寸的大白色广场.显然,我只需要质地的区域,即α不是为白色的.着色器似乎在工作,因为我将默认的白色更改为其他测试用例,并且正方形确实会改变颜色. 我在一个简单的项目中尝试了这一点,并得到了相同的结果.我如何确保只有纹理的可见部分被阴影? 修改后的呼叫看起来像这样: spriteBatch.Begin(0, null, null, null, null, whiteEffect); spriteBatch.Draw(myTexture, CenterOnScreen(myTexture), Color.White); spriteBatch.End(); 解决方案 首先,双检查以确保您的图像中
14 2024-04-25
编程技术问答社区
二维土砖到三维土砖
方案 我正在使用 赤道附近的瓷砖太短,使内容看起来像水平伸展 北极附近的瓷砖太高了,使内容看起来垂直拉伸 我最初的想法是使用Mathf.Sin在赤道附近膨胀瓷砖(SIN1)的同时缩短磁极附近的瓷砖(SIN0).从理论上讲,这个想法听起来很听起来,但实际上进展不顺利. 问题 如何使我的着色器进行调整以进行必要的2d到3D垂直瓷砖调整?我一直在寻找一些凝结着的着色器代码,这些代码照顾了它的V2F功能中的所有内容,但我没有太多运气. 一些代码 basetile-> getThetAphifromxy(getThetaphifromkey使用的核心) public static Vector2 GetThetaPhiFromXY(float x, float y, int zoomLevel, bool stretch = false) { Vector2 tilesXY = TileGroup.GetTilesXY(zoomLevel);
6 2024-04-22
编程技术问答社区
如何在 Unity 着色器中实现简单的高度贴图
让我开始说我对着色器编程知之甚少.我这里拥有的很多东西都是从在线资源和现有资产中缝合在一起的.我只需要知道如何将高度图正确整合到统一着色器中.它不必比标准的Unity着色器更复杂.我无法使用标准着色器,因为我需要一个将多种纹理拼凑在一起的着色器,这可能就是为什么我还没有找到解决此问题的解决方案的原因. 我已经混合并围绕代码移动,删除了一些变量,重命名了一些变量,并在线查找了任何有类似问题的人. Shader "Unlit/TRUE_EARTH" { Properties { _TexA1 ("Tex A1", 2D) = "white" {} _TexA2 ("Tex A2", 2D) = "white" {} _TexB1 ("Tex B1", 2D) = "white" {} _TexB2 ("Tex B2", 2D) = "white" {} _TexC1 ("Tex C1"
2 2024-04-22
编程技术问答社区
如何使天空盒旋转(Unity)?
好吧,我需要使用此Skybox着色器,因为它允许我需要的混合,问题是我还需要旋转(动画旋转),如下所述:着色器: Shader "RenderFX/Skybox Blended" { Properties { _Tint ("Tint Color", Color) = (.5, .5, .5, .5) _Tint1 ("Tint Color one", Color) = (.5, .5, .5, .5) _Tint2 ("Tint Color two", Color) = (.5, .5, .5, .5) _Blend ("Blend", Range(0.0,1.0)) = 0.5 _Skybox1 ("Skybox one", Cube) = "" _Skybox2 ("Skybox two", Cube) = "" } SubShader { Tags { "Queue" = "Background
4 2024-04-22
编程技术问答社区
从着色器中的 DataTextures 读取数据不正确
我的程序在我的texel尺寸中的锅datatexts是1:1(宽度:高)时效果很好,但是当它们在texel dimensions中的2:1或1:2时,看来Texel是错误的阅读和应用.我正在使用连续索引(1,2,3,4,5 ...)使用下面的两个功能访问Texel. 我想知道如何访问Texel数据有什么问题,或者是否需要将Float322ray用于整数索引是否需要切换到Uint8array或其他内容?预先感谢! 此功能在我的可视化中找到每个粒子云的纹理的紫外线: float texelSizeX = 1.0 / uPerCloudBufferWidth; float texelSizeY = 1.0 / uPerCloudBufferHeight; vec2 perMotifUV = vec2( mod(cellIndex, uPerCloudBufferWidth)*texelSizeX, floor(cellIndex / uPerCloudBu
12 2024-04-22
编程技术问答社区
复制现有的 Three.js 材料,添加位移计算
我需要使用三个js中的纹理图进行顶点位移. 是否有现有材料支持? 如果不是,那么复制现有的三个js着色器的最佳方法是什么,以便我可以添加一些顶点位移计算?我想将现有功能(例如阴影和线框)保留在材料上. 解决方案 使用纹理图的顶点位移由THREE.ShaderTerrain[ "terrain" ]和THREE.ShaderLib[ "normalmap" ]. 支持 可以在 http://threejs.s.s.s.s.s.org/examples/webgl_terrain_derrain_dynamnamiNAMINAMINAML 和 > 如果这些不适合您的需求,那么您将必须写自己的着色器.这样做并不容易.最好修改现有的着色器. 三.r.61
14 2024-04-22
编程技术问答社区
qt 一个纹理的多个 QGLS 着色程序
我使用两个QGLShaderProgram来处理纹理. ShaderProgram1->bind(); // QGLShaderProgram ShaderProgram2->bind(); glBegin(GL_TRIANGLE_STRIP); ... glEnd(); ShaderProgram1->release(); ShaderProgram2->release(); 应使用ShaderProgram1,然后再处理ShaderProgram2.但是,当我调用ShaderProgram2-> bind()时,自动触发ShaderProgram1-> Release(),只有一个着色器作品.我如何绑定两个着色器? 解决方案 你不. 除非这些是独立的着色器(即使它们是那样行不通的),否则每个渲染操作都会应用单个的着色器集.这意味着单个顶点着色器,然后是任何镶嵌着色器,然后是单个几何着色器,然后是单个片段着色器. 如果您想进入雏菊链着色器,则必须在着色
12 2024-04-22
编程技术问答社区
CG 编程的语义是什么?
的信息 实际上是什么语义?我们为什么用它?这是必要的吗? 解决方案 基本上,它告诉某些字段中存储了哪种数据 - 正常,纹理坐标等. 在固定功能管道中描述顶点格式很有用,但是在可编程管道语义中,Shader描述了其以顶点格式的定义可能没有意义(例如,Shader可能将TexCoord0用作正常),但仍然需要由编译器.
20 2024-04-22
编程技术问答社区
使用着色器升级 threejs 的问题
我正在处理3D Dataviz.我需要展示一个带有数据的世界,并且我使用Chrome实验(Chromeexperiments.com/globe)作为指导. 问题是,这种可视化是由三js R40制成的,很难找到有关它的文档,因此我尝试升级到R71. 我解决了构成世界的兼容性问题,但不能使它显示出气氛,实际上,当我试图展示气氛时,什么也没有显示出来(就像使气氛变成黑色,它掩盖了世界). 我认为问题是着色器,但我不确定. 有人有线索吗? 这是我正在使用的代码: gist.github.com/glena/0b2875044cd6c39ff150 谢谢 =========== 更新: 如果我删除了fragentshader,则将其呈现为红色球体,但静止的是黑色背景: var mesh = new THREE.Mesh(new THREE.SphereGeometry(100, 40, 30), new THR
16 2024-04-22
编程技术问答社区
如何以非矩形形式裁剪精灵?
我正在尝试以非矩形形式切割精灵,我发现这是倾斜的切割,但是如果给出方程式,有没有办法裁剪? 例如,椭圆形的方程式(x−h)^2/a^2 + (y−k)^2/b^2=1将其裁剪: 解决方案 我会知道,您知道我们可以使用UV为坐标. 由于公式有一些参数,让我们将其添加为统一: uniform float a:hint_range(0.0, 1.0); uniform float b:hint_range(0.0, 1.0); uniform float h:hint_range(0.0, 1.0); uniform float k:hint_range(0.0, 1.0); 我们计算我们的公式: shader_type canvas_item; uniform float a:hint_range(0.0, 1.0); uniform float b:hint_range(0.0, 1.0); uniform float h:hint_range(0.0,
22 2024-04-22
编程技术问答社区
仅渲染方框内的点云数据
我试图在带有着色器的3D框中仅渲染点云数据. 但是,点云数据着色器使用几何图形,剪贴盒着色器使用表面,因此我不知道如何将这两个组合在一起. 点云数据着色器 /////////////////////////////////////////// Shader "Custom/Pointcloud" { Properties{ _Radius("Sphere Radius", float) = 1.0 } SubShader{ LOD 200 Tags { "RenderType" = "Opaque" } //if you want transparency //Tags { "Queue" = "Transparent" "RenderType" = "Transparent" } //Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #prag
8 2024-04-22
编程技术问答社区
Unity:在着色器中访问 UI 画布图像的精灵二级纹理
在Unity中,我有一个带有常规_MainTex的精灵,还有一个附加的_inner纹理定义为Sprite Editor中的辅助纹理. 在ShaderGraph中,当我想访问适用于Sprite渲染器的材料的辅助纹理时,我可以在Texture2D属性中输入" ref",就像Texture2D属性一样,就像魅力一样. 但是,当我尝试使用适用于UI帆布图像的着色器(游戏中的UI)进行同一精灵进行相同的操作时,着色器似乎找不到次要纹理(因此,同一着色器在我的Spriterenderer上工作,但不在我的UI映像渲染器上). 我做错了什么吗?知道什么? 解决方案 我遇到了一个类似的问题,区别在于,我从着色器图中制作了一个不明显的着色器. 据我所知,问题是由主节点引起的.将主节点更改为Sprite Lit或Sprite Unt,然后可以指定辅助着色器,否则不会.因此,如果您的UI着色器可以通过点亮或雪橇弹性效果良好,则可以尝试一下. 精灵照明和精灵效果很好 编辑:
8 2024-04-22
编程技术问答社区
是否可以在着色器中访问预设纹理单元?
tl; dr:我已经激活了纹理并将纹理绑定到纹理1-4,现在我希望在着色器中使用它们而不使用程序特定的统一位置.是否可以使用"全局"纹理单元从纹理读取数据? 我很难理解如何访问WebGL中的纹理.在绑定了纹理 gl.activeTexture(gl.TEXTURE1 + i); gl.bindTexture(gl.TEXTURE_2D, tex); 其中i是新创建的纹理的索引,而tex是纹理本身. ,但没有给出如何使用此全局引用的示例来访问着色器中的纹理.在此前教程 " u_texture"完全跳过. 简而言之,我有两个程序,如果可以的话,我希望在全球范围内使用纹理,而不必在每个程序上进行划分.看到纹理单位的承诺,我认为我可以使用它们,但是我不知道如何实际做 之类的事情 sampler2D textureUnit2; 在着色器中.这可能吗?我是在使纹理的实施与使用它们的实用性混淆吗? 非常感谢! 解决方案 如果可以这样做,我希望在每个程序
18 2024-04-22
编程技术问答社区
如何剪切 Unity 中摄像机渲染的部分内容,以显示其后面另一个摄像机的渲染?
以上图像是我尝试使用默认渲染器以统一复制的内容.我需要网格或飞机或任何东西来切割相机呈现的部分,并显示其他相机呈现的内容. 我尝试使用渲染纹理和剔除口罩,它们都没有起作用.我确实看着着色器,但是我以前从未使用过它们,这就是为什么我需要帮助的原因.如果某人了解着色器或知道更好的解决方案,那将不胜感激. 这个问题可能有点短,但是我的较长的草稿被删除了,我不想再详细介绍所有细节.另外,我正在使用默认渲染器,这将是一个VR应用程序,我认为我应该提到它可以完全改变我必须做的事情.如果需要,更改渲染器并不晚. 解决方案 一个简单的解决方案而无需编写着色器,您只需使用UI掩码即可显示重新植物.我想您有2层L和M,一个是平报r,这是Hierachy: Camera1 (culling mask = L) Camera2 (culling mask = M, target = R) Object1 (layer = L) Object2 (layer = M) Canvas
10 2024-04-22
编程技术问答社区
如何使用 WebGL 和一个顶点着色器绘制多条 Bézier 曲线?
我想实现一个能够通过仅使用一个顶点着色器在画布上显示多个立方体bézier曲线的WebGL程序.我希望此着色器在每个曲线上计算给定数量的点,并重复每个曲线的过程. 说要绘制的立方贝齐曲线的数量为N. 由4个控制点定义的立方体bézier曲线,我将拥有N * 4控制点以给出顶点着色器. 说每个曲线要计算的点数为precision. 我计算曲线上包含precision插值值的列表ts(从0到1). 说precision是6,我最终会得到以下ts列表:[0, 0.2, 0.4, 0.6, 0.8, 1]. 使用这两个缓冲区(N * 4控制点的列表和ts列表),我希望Pertex着色器并行计算每个N曲线的所有插值点. . so对于ts中的每个t,每个curve,我想计算点curve(t)的位置,其中: curve(t) = (1 - t)³ * p0 + 3 * (1 - t)² * t * p1 + 3 * (1 - t) * t² * p2 + t
10 2024-04-22
编程技术问答社区
VkDescriptorPoolSize 中的 .descriptorCount 与 VkDescriptorSetLayoutBinding(VkDescriptorSetLayoutCreateInfo) 中的 .descriptorCount 有什么区别?
vkdescriptorpoolsize和vkdescriptorsetlayoutbinding中的.descriptorCount有什么区别(vkdescriptorsetorsetorsetlayoutcreateinfo)? 当有很多着色器时,如何设置它们,如何正确设置它们? 例如 layout(binding = 0) uniform Buffers { uint x[]; } buffers[5]; 然后: VkDescriptorSetLayoutBinding.descriptorCount = 5,//not 1, VkDescriptorPoolSize.descriptorCount = 5,//not 1, 如果许多着色器中的同一均匀的缓冲液在许多阴暗器中怎么办?当它在1个着色器中存在时,应该添加5个描述量吗? 解决方案 在VkDescriptorSetLayoutBinding::descriptorCount的情况下.
18 2024-04-22
编程技术问答社区
滤镜/着色器 "Godrays "不会使背景变暗
亲爱的宏伟的社区和开发人员, 有一个 pixijs 基于着色器的过滤器" " godrays" Alaingalvan ",但是要以某种方式实现这样的过滤器/着色器,这些滤镜/着色器确实会减轻某些"光明"的区域,而"光明"透明阶段而不会使背景变暗. const uniformData = { time: { type: 'float', value: 0.0 }, lacunarity: { type: 'float', value: 30.0 }, gain: { type: 'float', value: 1.0 }, parallel: { type: 'b', value: true }, light: { type: 'v2', valu
6 2024-04-22
编程技术问答社区
ThreeJS:实现 '非 ThreeJS' 着色器的问题
我正在尝试使用此帖子中的着色器 >具有三j的几何形状,到目前为止没有成功. 这是@gman的原始着色器代码: attribute vec4 a_position; attribute float a_v; varying float v_v; void main() { // PS: In a real WebGL app you'd probably need to multiply a_position by // a matrix at a minimum gl_Position = a_position; v_v = a_v; } precis
4 2024-04-22
编程技术问答社区
ThreeJS-使用自定义顶点着色器扩展兰伯特着色器
我想在这里调整此着色器: https://aerotwist.com/tutorials/tutorials/an-in-introduction-to- -shaders-part-2/ 对于标准的Lambert或Phong,它可以与我所有的灯光一起使用. 我目前的状态是我使用此代码扩展了兰伯特: var attributes = { displacement: { type: 'f', // a float value: [] // an empty array } }; var uniforms = { amplitude: { type: 'f', // a float value: 0 } }; var shaders = { mylambert : THREE.ShaderLib[ 'lambert' ] }; var materials = {}; m
20 2024-04-22
编程技术问答社区
需要着色器中纹理的平均值和最大值
我具有重新植物,需要计算其平均值和最大像素值.重新文化是rfloat格式的,因此只有一个组件.另外,它现在不使用MIPMAP. 解决方案 在搜索搜索之后,最好的方法是减少纹理,这意味着运行其输入的纹理大小,输出为输入大小的一半.我们可以采样4个相邻像素,并从中计算最大值并将值写入输出. sampler2D _MainTex; float4 _MainTex_ST; float4 _MainTex_TexelSize; v2f vert(appdata v) { v2f o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } float4 frag (v2f i) : SV_Target { fl
10 2024-04-22
编程技术问答社区