में अजीब स्क्वायर लाइटिंग कलाकृतियों मेरे पास एक प्रोग्राम है जो एक ऊंचाईमैप उत्पन्न करता है और फिर इसे ओपनजीएल के साथ जाल के रूप में प्रदर्शित करता है। जब मैं प्रकाश जोड़ने की कोशिश करता हूं, तो यह जाल को ढंकने वाले अजीब स्क्वायर आकृतियों के साथ समाप्त होता है। वे दूसरों के मुकाबले कुछ क्षेत्रों में अधिक ध्यान देने योग्य हैं, लेकिन हमेशा वहां रहते हैं।ओपनजीएल
मैं एक ट्रैक्टर जाल का उपयोग कर रहा था, लेकिन त्रिकोण जाल पर स्विच करने के बाद कुछ भी नहीं बदला। मैंने वर्टेक्स मानदंडों की गणना करने के लिए कम से कम तीन अलग-अलग तरीकों का उपयोग किया है, सभी एक ही प्रभाव के साथ। मैं शेडर्स के साथ मैन्युअल रूप से प्रकाश कर रहा था, लेकिन बिल्टिन ओपनजीएल लाइटिंग सिस्टम का उपयोग करते समय कुछ भी नहीं बदला।
int i;
for (i = 0; i < NINDEX; i += 3) {
vec v[3];
v[0] = verts[faces[i + 0]];
v[1] = verts[faces[i + 1]];
v[2] = verts[faces[i + 2]];
vec v1 = vec_sub(v[1], v[0]);
vec v2 = vec_sub(v[2], v[0]);
vec n = vec_norm(vec_cross(v2, v1));
norms[faces[i + 0]] = vec_add(norms[faces[i + 0]], n);
norms[faces[i + 1]] = vec_add(norms[faces[i + 1]], n);
norms[faces[i + 2]] = vec_add(norms[faces[i + 2]], n);
}
for (i = 0; i < NVERTS; i++) {
norms[i] = vec_norm(norms[i]);
}
हालांकि यह है कि केवल कोड मैं का उपयोग किया है नहीं है, इसलिए मैं यह है कि शक:
मेरे नवीनतम सामान्य पैदा कोड (का सामना कर रहा verts में सूचकांक की एक सरणी, शिखर सारणी है) समस्या का कारण है।
मैं के साथ जाल आकर्षित:
और मैं वर्तमान में किसी भी shaders नहीं उपयोग कर रहा हूँ।
इसका कारण क्या हो सकता है?
संपादित करें: स्क्रीनशॉट का एक अधिक व्यापक सेट:
पिछले एक के लिए, शेडर कोड
हैवर्टेक्स:
varying vec3 lightvec, normal;
void main() {
vec3 lightpos = vec3(0, 0, 100);
vec3 v = vec3(gl_ModelViewMatrix * gl_Vertex);
normal = gl_NormalMatrix * gl_Normal;
lightvec = normalize(lightpos - v);
gl_Position = ftransform();
}
टुकड़ा:
varying vec3 lightvec, normal;
void main(void) {
float l = dot(lightvec, normal);
gl_FragColor = vec4(l, l, l, 1);
}
क्या आप एक ही दृश्य के दो स्क्रीनशॉट पोस्ट कर सकते हैं, एक वायरफ्रेम के साथ और बिना किसी के? –
क्या 'मानक' शून्य-प्रारंभिक है? आप इसे पहले शून्य करने के बिना अपने वैक्टर को जमा कर रहे हैं, हालांकि यदि यह प्रोग्राम में कहीं और शून्य हो गया है जो समस्या नहीं होनी चाहिए। – genpfault
क्या आप शेडर में सामान्य विशेषताओं के लिए चिकनी इंटरपोलेशन का उपयोग कर रहे हैं? शायद थोड़ा सा 'फ्लैट' पर स्विच करने से समस्या को स्थानीयकृत करने में मदद मिल सकती है। इसके अलावा, ओपनजीएल लाइटिंग मेरे लिए बहुत छोटी होती है - मैं आमतौर पर कोड लिखने के बारे में अधिक निश्चित हूं। –