Я пытаюсь отобразить полностью нормальную текстуру в сферу.
Я не могу изменить свою текстуру на обернутую, поэтому мне нужно найти некоторую функцию отображения.
Это мой код вершинного шейдера:
vec3 north = vec3(0.0, 0.0, 1.0);
vec3 equator = vec3(0.0, 1.0, 0.0);
vec3 northEquatorCross = cross(equator, north);
vec3 vertexRay = normalize(gl_Vertex.xyz);
float phi = acos(vertexRay.z);
float tv = (phi / (PI*tiling));
float tu = 0.0;
if (vertexRay.z == 1.0 || vertexRay.z == -1.0) {
tu = 0.5;
} else {
float ang_hor = acos(max(min(vertexRay.y / sin(phi), 1.0), -1.0));
float temp = ang_hor / ((2.0*tiling) * PI);
tu = (vertexRay.x >= 0.0) ? temp : 1.0 - temp;
}
texPosition = vec2(tu, tv);
прямо отсюда:
http://blogs.msdn.com/coding4fun/archive/2006/10/31/912562.aspx
Это мой фрагментный шейдер:
color = texture2D(debugTex, texPosition);
Как вы можете видеть на этом скриншоте: http://img189.imageshack.us/img189/4695/sphereproblem.png,
это показывает трещину в сфере ... и это то, что я пытаюсь исправить.
(используемая текстура: http://img197.imageshack.us/img197/56/debug.jpg)
Первый комментарий на веб-сайте XNA действительно исправляет проблемы с помощью:
device.RenderState.Wrap0 = WrapCoordinates.Zero;
Но из-за того, что я недостаточно разбираюсь во внутренностях XNA, я не могу понять, что это решает в этой конкретной проблеме.
В Интернете некоторые испытывали то же самое и сообщают об ошибках интерполяции, но поскольку я реализую это непосредственно как фрагментные шейдеры (на пиксель / фрагмент), у меня не должно быть этой проблемы (нет интерполяция в текстуре ув).
Есть информация / решение по этому вопросу?