我想编写一个顶点着色器来处理我使用此代码的颜色和纹理
precision mediump float;
varying vec4 v_Color;
uniform sampler2D u_TextureUnit;
varying vec2 v_TextureCoordinates;
void main() {
gl_FragColor= (v_Color*texture2D(u_TextureUnit, v_TextureCoordinates));
}
当模型具有纹理贴图时它起作用但如果模型只有颜色加载黑色,我想在放置u_TextureUnit
之前检查sampler2D gl_FragColor
答案 0 :(得分:4)
你写过一个从纹理单元读取的着色器;您通常应该避免着色器中的条件性,因为它可能会分割执行路径。通常情况下,如果您有条件地执行的操作是制服,编译器可以弄清楚它,但是每次设置制服时您最终都可能需要重新编译。 ES 2无法反省采样单元的当前属性,因此初步解决方案可能类似于:
uniform bool u_ApplyTexture;
...
if(u_ApplyTexture)
gl_FragColor = {what you already have};
else
gl_FragColor = v_Color;
可能作为替代方案分析的非条件替代方案可能是:
uniform float u_TextureWeight;
...
gl_FragColor = v_Color*
mix(vec4(1.0),
texture2D(u_TextureUnit, v_TextureCoordinates),
u_TextureWeight);
当v_Color*vec4(1.0)
为u_TextureWeight
时0.0
v_Color*texture2D(u_TextureUnit, v_TextureCoordinates)
u_TextureWeight
为1.0
时评估为gl_FragColor = v_Color*(vec4(1.0) - texture2D(u_TextureUnit, v_TextureCoordinates));
。
如果你真的想要做鬼脸,你可能只是将纹理上传为负片图像并在着色器中再次将它们消极:
vec4(0.0)
很明显,如果您从采样单元获得v_Color
因为未附加纹理,则最终会将1.0
乘以if($_SERVER["REQUEST_METHOD"] == "GET") {
// id enviado desde GET
$id = mysqli_real_escape_string($db,$_GET['id']); // $db es la conexión MySQL
if($id > 0 and $id < 400) {
$sql = "SELECT url FROM urls WHERE id = '$id'"; // Traemos la primera URL del id correspondiente
$result = mysqli_query($db,$sql);
echo "Cantidad de rows devueltas x la consulta SQL:" ;
echo mysqli_num_rows($result);
echo "<br>";
while ($row = mysqli_fetch_array($result)) {
echo $row[0];
echo "<br>";
}
}
}
。