1
내가 지정된 입력과 상자를, WebGL을 쉐이더를 사용하여 단일 정수 입력 (기본적으로 색상)과를 취할 색상을 원하는 응용 프로그램에서 일하고 있어요에 값을 RGB로. 때문에, int 0xFF33CC 주어진16 진수 WebGL을 쉐이더
uniform int u_color;
float rValue = (((u_color) >> 16) & 0xFF)/255.0;
float gValue = (((u_color) >> 8) & 0xFF)/255.0;
float bValue = ((u_color) & 0xFF)/255.0;
gl_FragColor = vec4(rValue, gValue, bValue, 1.0);
, 1.0 = 적색, 녹색 = 0.2, 파란색 = 0.8
그러나, 아래 있듯이 나는 변화 & 마스크의 조합으로이 작업을 수행하기 위해, 원래 계획 문제가 발생하여 WebGL 쉐이더가 비트 단위로 쉬프트를 수행 할 수 없음을 알게되었습니다.
내가 그도 가능하다면 효율적으로 지정된 정수에서 적절한 FragColor을 생산할 수있을 얼마나 궁금하네요.
편집 : @Jongware에 시행 착오, 그리고 감사의 비트 후, 나는 최대 깨끗한보다는
uniform int u_color;
float rValue = float(u_color/256/256);
float gValue = float(u_color/256 - int(rValue * 256.0));
float bValue = float(u_color - int(rValue * 256.0 * 256.0) - int(gValue * 256.0));
gl_FragColor = vec4(rValue/255.0, gValue/255.0, bValue/255.0, 1.0);
다른 해결책을 마련했습니다,이 코드는 작업에 적합 그러나 나는 항상 위에서 언급 한 것과 다른 다른 방법에 관심이있을 것입니다.
비트 이동이 없으면 '/ 256'과 '/ 65536'을 사용할 수 있습니다. (하지만 숫자가 실수로 변환되지 않는지 확인해보십시오. 그렇다면''대신''와''대신''% ''를 사용해야 할 수도 있습니다.) – usr2564301
고마워, ! –
일반적인 대답은 다음과 같습니다. http://stackoverflow.com/questions/18453302/how-do-you-pack-one-32bit-int-into-4-8bit-ints-in-glsl-webgl. "효율성"이 간다면, 여러분의 상수가 프래그먼트 컴파일러에 의해 접혀지기를 바랍니다. – usr2564301