필자는 WebGL에서 프랙탈을위한 거리 함수를 사용하여 반복 횟수를 3 이상으로 설정할 때마다 내 컴퓨터에서 오류를 발견했습니다. 그 말은 그레이 스케일 프랙탈 대신에 회색 화면을 얻는다는 것입니다 (비 -WebGL 설정에서 정확성을 테스트했기 때문에 계산이 완료되지 않았다고 생각합니다)for 루프를 수동으로 반복하는 이유는 무엇입니까?
그러나 컴퓨터에서는 직장에서는 3 또는 그 이상으로 잘 작동합니다. 나는이 같은 반복의 수를 정의 :이에 ...
float mandelboxDist(Object inMandelbox, vec3 inPos) {
inPos -= inMandelbox.pos;
vec3 offset = vec3(inPos);
float d = 1.0;
for (int i = 0; i < MANDELBOX_ITER; i++) {
// Boxfold
inPos = clamp(inPos, -MANDELBOX_BFOLD, MANDELBOX_BFOLD)*2.0-inPos;
// Spherefold
float posDot = dot(inPos, inPos);
if (posDot < MANDELBOX_MIN_RAD) {
inPos *= MANDELBOX_LINEAR_SCALE;
d *= MANDELBOX_LINEAR_SCALE;
}
else if (posDot < MANDELBOX_FIXED_RAD) {
float inversion = MANDELBOX_FIXED_RAD/posDot;
inPos *= inversion;
d *= inversion;
}
inPos = MANDELBOX_SCALE*inPos+offset;
d = MANDELBOX_SCALE*d+1.0;
}
return length(inPos)/abs(d);
}
:
#define MANDELBOX_ITER 20
내가 내 반복 기반 코드 변환 문제를 알아 내기 위해 노력
void iterateMandelbox(inout vec3 pos, vec3 inOffset, inout float d) {
// Boxfold
pos = clamp(pos, -MANDELBOX_BFOLD, MANDELBOX_BFOLD)*2.0-pos;
// Spherefold
float posDot = dot(pos, pos);
if (posDot < MANDELBOX_MIN_RAD) {
pos *= MANDELBOX_LINEAR_SCALE;
d *= MANDELBOX_LINEAR_SCALE;
}
else if (posDot < MANDELBOX_FIXED_RAD) {
float inversion = MANDELBOX_FIXED_RAD/posDot;
pos *= inversion;
d *= inversion;
}
pos = MANDELBOX_SCALE*pos+inOffset;
d = MANDELBOX_SCALE*d+1.0;
}
float mandelboxDist(Object inMandelbox, vec3 inPos) {
inPos -= inMandelbox.pos;
vec3 offset = vec3(inPos);
float d = 1.0;
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
iterateMandelbox(inPos, offset, d);
return length(inPos)/abs(d);
}
. 내 컴퓨터에서 작동하는 것을 발견했습니다. 분명히 이것은 매우 불편하며, "수동으로"루핑 할 때 왜 작동하는지 알지 못합니다. 무슨 일 이니?
편집 : LJ_1102의 대답에 대응하여, 나는 "이 매킨토시에 관하여"2011 년에서 맥북과이가 나에게 말한다 나는이에 "인텔 HD 그래픽 3000 384메가바이트"그래픽 카드 가정에서
나는 실제로 맥북을 가지고있다. 중요한 점은 2011 년부터이고 "이 Mac 정보"에서 "Intel HD Graphics 3000 384 MB"그래픽 카드가 있다고 말합니다 – asimes
그렇습니다. 그렇다면 Macbook에서 OSX를 사용하고 있다고 가정하고 있습니까? 제가 인텔 (Intel HD 3000) 드라이버에 몇 가지 문제가 있음을 기억하는 한, 최신 버전의 OSX가 설치되어 있습니까? [chrome : // gpu /] (chrome : // gpu /)/[about : gpu] (about : gpu) (크롬을 사용한다고 가정 할 때), 어떤 드라이버 해결 방법이 적용됩니까? 또한 [WebGL 적합성 테스트] (https://www.khronos.org/registry/webgl/sdk/tests/webgl-conformance-tests.html)를 참조하십시오. 가장 좋은 방법은 그래픽 드라이버를 업데이트하는 것입니다. –
그 외에도 종료 조건으로 define 대신 상수를 사용하려 했습니까? –