¿Cómo modificar el atributo Emission en el sombreador estándar StandardShader? 1. Utilice DirectX Caps Viewer para comprobar la versión del sombreador compatible con mi tarjeta gráfica (GeForce 9400 GT, es 3.0, por lo que es mejor admitir texturas de 16 capas). Para la función D3DXCompileShaderFromFile(), hay un parámetro que vale la pena señalar, es decir, Flags. Según el libro (DirectX 9.0 Game View Programming Fundamentals), solo hay tres opciones de compilación legales, pero si ejecutamos su código VS directamente, aparece el error. se encuentra debido a estas banderas. Solución: verifique el SDK y descubra que en realidad hay más de tres. DX9 admite 10 FLAGES y DX10 admite más. Hay dos soluciones: cambie ps_1_1 a ps_3_0, no cambie FLAGES, depende de su tarjeta gráfica. es Modifique D3DXSHADER_DEBUG a D3DXSHADER_ENABLE_ BACKWARDS_COMPATIBILITY y puede configurarlo en 1. 0 se considera una compilación 2.0, que es compatible con versiones anteriores, pero este elemento de compilación es compatible con DX10, simplemente agregue el enlace de biblioteca correspondiente. 2. Para el sombreador compilado, usamos CreatePixelShader para obtener el puntero de la interfaz IDirectX3DPixelShader9 (algunas interfaces que operan en DX) y usamos la aplicación para cambiar el valor de la variable o el valor inicial en el sombreador configurado (sombreador). ID3DConstantTable debe usarse e inicializarse al valor predeterminado usando la siguiente declaración. Mostrar fuente de vista de fuente print?MultiTexCT-gt;SetDefaults(Dispositivo);Establecido por la siguiente declaración: mostrar fuente de vista de fuente print?1HRESULT SetXXX(2 LPDIRECT3DDEVICE9 pDevice, 3 D3DXHANDLE hConstant, 4 XXX VALUE 5); configúrelos Cargar en la interfaz correspondiente: mostrar fuente de vista fuente imprimir? 1D3DXCreateTextureFromFile(Dispositivo, "crate.bmp", & BaseTex; 2D3DXCreateTextureFromFile(Dispositivo, "spotlight.bmp", & SpotLightTex); ", amp; StringTex); El segundo paso es obtener el identificador de la muestra de textura en el sombreador: ver código fuente print?1BaseTexHandle = MultiTexCT-gt; GetConstantByName(0, "BaseTex"); //Este BaseTex es diferente del arriba de BaseTex, este BaseTex es el nombre del muestreador en el sombreador, que es la interfaz de textura 2SpotLightTexHandle = MultiTexCT-gt; GetConstantByName(0, "SpotLightTex");; ; // Esta es una interfaz de textura.
3StringTexHandle = MultiTexCT-gt; GetConstantByName(0, "StringTex"); El tercer paso es establecer el valor del sampler en el sombreador. Personalmente, creo que el del libro es más engorroso: en el libro, primero use GetConstantDesc Obtenga la descripción de la muestra, porque la descripción contiene el índice de registro del adoptante. Para obtener más detalles, consulte el libro de texto: show sourceview source print?1MultiTexCT-gt; , amp; count); 2Device-gt; SetSamplerState(BaseTexDesc.MIPFILTER, D3DTEXF_LINEAR); El segundo método se descubrió accidentalmente al verificar el SDK, es decir, obtener directamente el índice de registro del muestreador sin explicar la situación, como se muestra a continuación: ¿Ver fuente de impresión?SetSamplerState(MultiTexCT-gt; GetSamplerIndex(BaseTexHandle), D3DSAMP_MINFILTER, D3DTEXF_LINEAR); 5Device-gt; SetSamplerState(MultiTexCT-gt; GetSamplerIndex(BaseTexHandle), D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); 1 El cuarto paso es llamar al conjunto de muestras y su textura enlazada: lt; DIV class=cnblogs_Highlightergt; lt; PRE class=brush: cppgt;