uint8을 부동으로 캐스팅 한 셰이더 및 uint로 다시 해석

앤 퀸

셰이더에 의해 매우 이상하게 씹히는 버텍스 속성이 있습니다. VBO에 업로드 (uint8)1되지만 프래그먼트 셰이더가이를 인식하면으로 해석 10653532160되거나 0x3F800000일부 사용자가 1.0f부동 소수점 의 비트 패턴으로 인식 할 수 있습니다 .

왜 그런지 모르겠어요? 그래도 VBO에 1 ( 0x00000001) 로 업로드되었음을 확인할 수 있습니다 .

vertex 속성은 다음과 같이 정의됩니다.

struct Vertex{
    ...
    glm::u8vec4 c2; // attribute with problems
};
// not-normalized
glVertexAttribPointer(aColor2, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, c2));

셰이더에는 해당 속성이

glBindAttribLocation(programID, aColor2, "c2");

버텍스 셰이더는 매우 이벤트없이 속성을 따라 전달합니다.

#version 330
in lowp uvec4 c2; // <-- this value is uploaded to the VBO as 0x00, 0x00, 0x00, 0x01;
flat out lowp uvec4 indices;

void main(){
    indices = c2;
}

마지막으로 조각 셰이더가이를 파악합니다.

flat in lowp uvec4 indices; // <-- this value is now 0, 0, 0, 0x3F800000
out lowp vec4 fragColor;
void main(){
    fragColor = vec4(indices) / 256.0;
}

indices다양한 나뭇잎과 버텍스 쉐이더 0x3F800000에 대한 indices.w내 쉐이더 관리자에 따르면, 뭔가 있도록 홀수가 일어나고? 원인은 무엇입니까?

Rabbid76

꼭지점 속성의 유형이 필수이므로 (focus on ) glVertexAttribIPointer대신 사용해야 합니다. 을 참조하십시오 .glVertexAttribPointerIglVertexAttribPointer

에 지정된 glVertexAttribPointer유형은 소스 버퍼의 데이터 유형이며 셰이더에서 대상 속성 유형을 지정하지 않습니다. 를 사용 glVertexAttribPointer하면 셰이더 프로그램의 속성 유형이 부동 소수점으로 간주되고 정수 데이터가 변환됩니다.
사용하는 경우 glVertexAttribIPointer값은 정수 값으로 남습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

uint8을 uint32로 캐스팅

분류에서Dev

uint8을 uint8 []로 캐스트

분류에서Dev

"uint8"을 "float32"로 변환해야하는 이유

분류에서Dev

다시 한 번 : UInt8로 변환 할 수 없음

분류에서Dev

입력을위한 Caffe Python Layer, 데이터 유형을 uint8로 설정

분류에서Dev

uint8 *을 uint32 *로 캐스팅하는 방법은 무엇입니까?

분류에서Dev

uint32_ts 및 uint_8ts를 문자로 파일에 작성한 다음 uint32_ts 및 uint_8ts로 다시 변환

분류에서Dev

업 캐스팅 및 다운 캐스팅을 불법으로 만드는 것

분류에서Dev

이미지 데이터 유형을 uint16에서 uint8로 변환

분류에서Dev

c-uint8_t *를 uint32_t * 동작으로 캐스팅

분류에서Dev

uint8 배열을 이미지로 변환

분류에서Dev

정렬되지 않은 uint8_t에서 uint32_t 배열로 다시 캐스팅-모든 값을 가져 오지 않음

분류에서Dev

신속한 3 ios : UInt8 배열을 int8로 변환

분류에서Dev

uint8 바이트 배열을 모든 WPF 렌더링 개체로 변환

분류에서Dev

배열의 부울 값을 uint8 비트 필드로 푸시

분류에서Dev

Dart는 두 개의 Uint8을 하나의 Uint16으로 변환합니다.

분류에서Dev

uint8 유형으로 배열을 초기화 할 수 없습니다.

분류에서Dev

uint8 및 uint16을 사용하는 cout << hex의 동작

분류에서Dev

동일한 호출에서 열을 다른 유형으로 캐스팅

분류에서Dev

"wstring"을 "const UInt8 *"로 변환

분류에서Dev

int 유형을 uint8로 변환

분류에서Dev

비 Objective-C 포인터 유형 'const UInt8 *'(일명 'const unsigned char *')을 'NSData *'로 캐스트하는 것은 ARC에서 허용되지 않습니다.

분류에서Dev

파이썬을 사용하여 numpy 배열을 uint8로 변환

분류에서Dev

UInt8 (또는 유사한 유형)을 Int로 변환하면 UInt8의 목적에 맞지 않습니까?

분류에서Dev

null 및 undefined를 확인한 후`as NonNullable <T>`로 캐스팅해야하는 이유는 무엇입니까?

분류에서Dev

유형 캐스팅으로 인해 이진 값에서 부동 값으로의 변환이 작동하지 않습니다.

분류에서Dev

Numpy ndarray of dtype (uint8)을 OpenCV 판독 가능 이미지로 변환

분류에서Dev

Swift 사전에 [UInt8]을 값으로 넣어도 작동하지 않습니다.

분류에서Dev

일부 변수의 합계를 포인터로 캐스팅 한 다음 다시 정수로 캐스팅

Related 관련 기사

  1. 1

    uint8을 uint32로 캐스팅

  2. 2

    uint8을 uint8 []로 캐스트

  3. 3

    "uint8"을 "float32"로 변환해야하는 이유

  4. 4

    다시 한 번 : UInt8로 변환 할 수 없음

  5. 5

    입력을위한 Caffe Python Layer, 데이터 유형을 uint8로 설정

  6. 6

    uint8 *을 uint32 *로 캐스팅하는 방법은 무엇입니까?

  7. 7

    uint32_ts 및 uint_8ts를 문자로 파일에 작성한 다음 uint32_ts 및 uint_8ts로 다시 변환

  8. 8

    업 캐스팅 및 다운 캐스팅을 불법으로 만드는 것

  9. 9

    이미지 데이터 유형을 uint16에서 uint8로 변환

  10. 10

    c-uint8_t *를 uint32_t * 동작으로 캐스팅

  11. 11

    uint8 배열을 이미지로 변환

  12. 12

    정렬되지 않은 uint8_t에서 uint32_t 배열로 다시 캐스팅-모든 값을 가져 오지 않음

  13. 13

    신속한 3 ios : UInt8 배열을 int8로 변환

  14. 14

    uint8 바이트 배열을 모든 WPF 렌더링 개체로 변환

  15. 15

    배열의 부울 값을 uint8 비트 필드로 푸시

  16. 16

    Dart는 두 개의 Uint8을 하나의 Uint16으로 변환합니다.

  17. 17

    uint8 유형으로 배열을 초기화 할 수 없습니다.

  18. 18

    uint8 및 uint16을 사용하는 cout << hex의 동작

  19. 19

    동일한 호출에서 열을 다른 유형으로 캐스팅

  20. 20

    "wstring"을 "const UInt8 *"로 변환

  21. 21

    int 유형을 uint8로 변환

  22. 22

    비 Objective-C 포인터 유형 'const UInt8 *'(일명 'const unsigned char *')을 'NSData *'로 캐스트하는 것은 ARC에서 허용되지 않습니다.

  23. 23

    파이썬을 사용하여 numpy 배열을 uint8로 변환

  24. 24

    UInt8 (또는 유사한 유형)을 Int로 변환하면 UInt8의 목적에 맞지 않습니까?

  25. 25

    null 및 undefined를 확인한 후`as NonNullable <T>`로 캐스팅해야하는 이유는 무엇입니까?

  26. 26

    유형 캐스팅으로 인해 이진 값에서 부동 값으로의 변환이 작동하지 않습니다.

  27. 27

    Numpy ndarray of dtype (uint8)을 OpenCV 판독 가능 이미지로 변환

  28. 28

    Swift 사전에 [UInt8]을 값으로 넣어도 작동하지 않습니다.

  29. 29

    일부 변수의 합계를 포인터로 캐스팅 한 다음 다시 정수로 캐스팅

뜨겁다태그

보관