में क्यूब मैपिंग मैं स्काईबॉक्स प्रभाव प्राप्त करने के लिए 6 बिटमैप्स के साथ घन को मैप करने का प्रयास करता हूं। मेरी समस्या यह है कि एक बनावट घन के हर चेहरे पर मैपिंग कर रही है। मैंने gubeBugger में चेक किया है, घन बनावट मेमोरी में मेरे पास केवल एक छवि है (जैसा कि मैं छह छवियों को लोड करने का प्रयास करता हूं)।ओपनजीएल
कोड की तैयारी बनावट:
bool Texture::LoadCubicTexture(vector<string> filenameTable)
{
glGenTextures(1,&texID);
glBindTexture(GL_TEXTURE_CUBE_MAP,texID);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_R,GL_CLAMP_TO_EDGE);
int i = 0;
vector<string>::iterator vsit;
// There is always six filenames
for(vsit=filenameTable.begin();vsit!=filenameTable.end();++vsit)
{
string filename = *vsit;
BMPData* bmpData = LoadTextureBMPData_custom(filename);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+i,0,GL_RGB,bmpData->width,bmpData->height,0,GL_BGR,GL_UNSIGNED_BYTE,&(bmpData->data[0]));
i++;
delete daneObrazu;
}
glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
return true;
}
वी.एस.:
#version 330 core
in vec3 vVertexPos;
in vec3 vertexUV;
out vec3 vCoords;
uniform mat4 MVP;
void main()
{
vCoords = normalize(vertexUV);
gl_Position = MVP * vec4(vVertexPos,1.0);
}
एफएस:
#version 330 core
in vec3 vCoords;
uniform samplerCube cube;
out vec4 vFragColor;
void main()
{
vFragColor = texture(cube, vCoords);
}
OBJ फ़ाइल:
# Blender v2.62 (sub 0) OBJ File: 'skybox.blend'
# www.blender.org
mtllib skybox.mtl
o Cube
v 10.487665 -10.487666 -10.487665
v 10.487665 -10.487666 10.487665
v -10.487667 -10.487666 10.487664
v -10.487662 -10.487666 -10.487670
v 10.487671 10.487666 -10.487660
v 10.487659 10.487666 10.487673
v -10.487670 10.487666 10.487662
v -10.487665 10.487666 -10.487666
vt 0.990480 0.014286
vt 0.993478 0.991259
vt 0.016505 0.994256
vt 0.013507 0.017283
vt 0.988479 0.008111
vt 0.985457 0.993412
vt 0.000157 0.990390
vt 0.003179 0.005089
vt 0.002693 1.001082
vt -0.000347 0.009939
vt 0.990796 0.006898
vt 0.993837 0.998041
vt 0.004581 0.999210
vt 0.001535 0.006444
vt 0.994302 0.003398
vt 0.997347 0.996165
vt 0.004172 -0.000587
vt 0.996320 -0.003630
vt 0.999364 0.988517
vt 0.007216 0.991561
vt 0.000632 0.000140
vt 0.983846 -0.002921
vt 0.986862 0.995017
vt 0.003648 0.998078
vn 0.000000 -1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -0.000000 -0.000000 1.000000
vn -1.000000 -0.000000 -0.000000
vn 0.000000 0.000000 -1.000000
usemtl Skybox
s off
f 1/1/1 2/2/1 3/3/1
f 1/1/1 3/3/1 4/4/1
f 5/5/2 8/6/2 7/7/2
f 5/5/2 7/7/2 6/8/2
f 1/9/3 5/10/3 6/11/3
f 1/9/3 6/11/3 2/12/3
f 2/13/4 6/14/4 7/15/4
f 2/13/4 7/15/4 3/16/4
f 3/17/5 7/18/5 8/19/5
f 3/17/5 8/19/5 4/20/5
f 5/21/6 1/22/6 4/23/6
f 5/21/6 4/23/6 8/24/6
मेरे सवालों का:
- तकनीक मैं इस कोड में उपयोग ठीक लग रहा है कर रहे हैं?
- क्यूब के लिए मैक्सिंग कैसे हैं (GL_TEXTURE_CUBE_MAP बनावट में), जब केवल 2 यूवी है? (मेरा मतलब सामान्य है।)
- क्या मैं इस स्थिति में यूवी की स्वचालित पीढ़ी का उपयोग कर सकता हूं (क्या मेरे पास शेडर में कई बदलाव करने के लिए है)?
- क्या कोई मुझे सुझाव दे सकता है कि मैं किसी समस्या की खोज कहां कर सकता हूं? (कुछ संभावना के साथ; बफर, शेडर्स, मेष; केवल सुझाव)?
[संपादित करें]: मैं अलग स्रोत फ़ाइल में कोने और uvs हार्डकोड करने की कोशिश की और मैं घन के सभी चेहरे के लिए एक ही समस्या एक बनावट है।
#include "TestCube.h"
vector<vec3> GetTestCubeVertices()
{
vector<vec3> vrtx;
const float xd = 1.0f;
const float yd = 1.0f;
const float zd = 1.0f;
const float testCubeVertices[] =
{
-xd, -yd, zd, xd, -yd, zd, -xd, yd, zd, // ABE
xd, -yd, zd, -xd, yd, zd, xd, yd, zd, // BEF
xd, -yd, zd, xd, -yd, -zd, xd, yd, zd, // BCF
xd, -yd, -zd, xd, yd, zd, xd, yd, -zd, // CFG
xd, -yd, -zd, -xd, -yd, -zd, xd, yd, -zd, // CDG
-xd, -yd, -zd, xd, yd, -zd, -xd, yd, -zd, // DGH
-xd, -yd, -zd, -xd, -yd, zd, -xd, yd, -zd, // DAH
-xd, -yd, zd, -xd, yd, -zd, -xd, yd, zd, // AHE
-xd, yd, zd, xd, yd, zd, -xd, yd, -zd, // EFH
xd, yd, zd, -xd, yd, -zd, xd, yd, -zd, // FHG
xd, -yd, zd, -xd, -yd, zd, xd, -yd, -zd, // BAC
-xd, -yd, zd, xd, -yd, -zd, -xd, -yd, -zd, // ACD
};
for(int i=0;i<108;i=i+3)
vrtx.push_back(vec3(testCubeVertices[i],testCubeVertices[i+1],testCubeVertices[i+2]));
return vrtx;
}
vector<vec2> GetTestCubeUVs()
{
vector<vec2> uv;
const float testCubeUV[] =
{
0,0, 1,0, 0,1, // ABE
1,0, 0,1, 1,1, // BEF
0,0, 1,0, 0,1, // BCF
1,0, 0,1, 1,1, // CFG
0,0, 1,0, 0,1, // CDG
1,0, 0,1, 1,1, // DGH
0,0, 1,0, 0,1, // DAH
1,0, 0,1, 1,1, // AHE
0,0, 1,0, 0,1, // EFH
1,0, 0,1, 1,1, // FHG
0,0, 1,0, 0,1, // BAC
1,0, 0,1, 1,1, // ACD
};
for(int i=0;i<72;i=i+2)
uv.push_back(vec2(testCubeUV[i],testCubeUV[i+1]));
return uv;
}
फिर भी दो suplementary सवाल है, मैं ओपन कॉल कर सकते हैं: हार्डकोडेड डेटा सही प्रतीत हो रहा है
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_R,GL_CLAMP_TO_EDGE);
- मैं समझता हूँ कि ओपन संभालती आर स्वचालित रूप से समन्वय, क्योंकि में जानकारी नहीं है glTexImage2D() के लिए निरंतर GL_TEXTURE_CUBE_MAP_POSITIVE_X?
- क्या Vertex Shader में r समन्वय में कोई संशोधन आवश्यक है?
नीचे परिणाम स्क्रीन नहीं है (गहराई बफर करने के लिए विकलांग लेखन और scalling सेट नहीं किया है, लेकिन यह मेरी समस्या अब नहीं है):
मैंने देखा है कि बनावट पांचवें भरी हुई है दोहराया बनावट (GL_TEXTURE_CUBE_MAP_POSITIVE_Z)।
[अंतिम संपादन]: यूवी के साथ समस्या यह Skybox वी.एस. में निर्देशांक (आर समन्वय एक महत्व है), Skybox वी.एस. होना चाहिए, जैसा कि नीचे थी:
void main()
{
vCoords = normalize(vVertexPos);
gl_Position = MVP * vec4(vVertexPos,1.0);
}
नहीं है स्काईबॉक्स तकनीक के साथ कुछ मुद्दे, लेकिन वे इस धागे का विषय नहीं थे। हल किया।
अगर आप मॉडल .obj का उपयोग नहीं करते हैं और इसके बजाय कोड में 6 quads बनाने क्या होता है? –
मैंने अलग-अलग शीर्षलेख में हार्डकोड और यूवी हार्डकोड किया और वही समस्या है। – CppMonster