for (int i = 0; i < 12; i++) {
Vertex v;
v.pos = (glm::vec3)((GLfloat)(rand() % 100) / 50 - 1, (GLfloat)(rand() % 100) / 50 - 1, (GLfloat)(rand() % 100) / 50 - 1);
v.col = (glm::vec3)((GLfloat)(rand() % 100) / 100, (GLfloat)(rand() % 100) / 100, (GLfloat)(rand() % 100) / 100);
tri4.objData.vertices.push_back(v);
std::cout << tri4.objData.vertices.at(i).pos.x <<"\t" <<i4.objData.vertices.at(i).pos.y<<"\t"<< tri4.objData.vertices.at(i).pos.z << "\n\n";
std::cout << tri4.objData.vertices.at(i).col.x << "\t" << tri4.objData.vertices.at(i).col.y << "\t" << tri4.objData.vertices.at(i).col.z << "\n\n";
tri4.objData.indices.push_back(i);
std::cout << tri4.objData.indices.at(i) << '\n';
}
Tihis मामले में यह मेरा GL कोड है, pos.x और pos.y समान हैं .. वे तीन रैंड() 'v.pos =' लाइन या 'v.col =' लाइन पर समान हैं .. मैंने किया ' srand (समय) या कुछ और का उपयोग न करें। क्या रैंड () एक पंक्ति पर समान मान लौटाता है? या vec3 को इससे कोई समस्या है?
2 जवाब
इसका आपके लिए काम नहीं करने का कारण यह है कि आप इसका उपयोग कर रहे हैं
v.pos = (glm::vec3)(...)
जो ...
द्वारा दर्शाए गए सामान को vec3 में कास्ट कर रहा है।
लेकिन ...
तीन अल्पविराम से अलग किए गए GLfloat मान हैं। अल्पविराम ऑपरेटर पहले दो को छोड़ देता है और तीसरे को एकल तर्क निर्माता का उपयोग करके vec3 में डाला जाता है और इसीलिए केवल एक मान होता है।
आप एक कलाकार नहीं चाहते हैं - आप तीन तर्क निर्माता चाहते हैं - इसलिए बिना कोष्ठक के जाएं:
v.pos = glm::vec3(...)
यहां कलाकारों के बीच तुलना है और आप वास्तव में क्या करने की कोशिश कर रहे थे:
#include <iostream>
struct vec3 {
int x, y, z;
vec3(int v) : x(v), y(v), z(v) { std:: cout << "vec3(int v)\n"; }
vec3(int x, int y, int z) : x(x), y(y), z(z) { std:: cout << "vec3(int x,int y,int z)\n"; }
};
int main() {
vec3 pos = (vec3)(1,2,3); // calls vec3(3)
vec3 col = vec3(1,2,3); // calls vec3(1,2,3)
}
हां, फ़ंक्शन के प्रत्येक आमंत्रण को एक (सबसे अधिक संभावना) अलग परिणाम के साथ एक अलग कॉल माना जाता है।
आप इसे किसी भी फ़ंक्शन से सत्यापित कर सकते हैं, जैसे कि:
#include <iostream>
int getVal() {
static int val = 0;
return ++val;
}
int main() {
std::cout << getVal() * getVal() * getVal() << '\n';
}
यह आपको 1 * 2 * 3
, या 6
देगा।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।