Я использую Silk.Net для интерфейса OpenGL, загружаю файлы .obj для данных модели и материалов.
Все работает так, как мне хотелось, и попытался добавить ко всему этому отображение теней (следуя руководству LearnOpenGL) . Если я привязываю фреймбуфер, текстуру и все остальное, но ничего с этим не делаю, шейдер и рендеринг все равно работают нормально. Но если я даже просто вызову Clear(), экран останется черным (я обнаружил, что неустановленная текстура в моем шейдере AlphaTexture по какой-то причине возвращает полные значения 1.0, а также некоторые вычисления просто прерываются). Я потратил на это кучу времени и постепенно начинаю сходить с ума. Пожалуйста, помогите, вот соответствующий код, а также весь репозиторий:
Создание фреймбуфера и его вложения (в Light.cs):
public void BindFramebuffer(GL gl)
{
gl.BindFramebuffer(FramebufferTarget.Framebuffer, _shadowMapFbo);
gl.Viewport(0, 0, ShadowWidth, ShadowHeight);
gl.Clear(ClearBufferMask.DepthBufferBit); // even just this breaks everything
}
Даже если я не добавляю ничего, связанного с шейдером, тень испортится, поэтому я не думаю, что шейдер может быть плохим (я также следовал руководству LearnOpenGL для это), но это в Ресурсах/
Я использую Silk.Net для интерфейса OpenGL, загружаю файлы .obj для данных модели и материалов. Все работает так, как мне хотелось, и попытался добавить ко всему этому отображение теней (следуя руководству LearnOpenGL) . Если я привязываю фреймбуфер, текстуру и все остальное, но ничего с этим не делаю, шейдер и рендеринг все равно работают нормально. Но если я даже просто вызову Clear(), экран останется черным (я обнаружил, что неустановленная текстура в моем шейдере AlphaTexture по какой-то причине возвращает полные значения 1.0, а также некоторые вычисления просто прерываются). Я потратил на это кучу времени и постепенно начинаю сходить с ума. Пожалуйста, помогите, вот соответствующий код, а также весь репозиторий: Создание фреймбуфера и его вложения (в Light.cs): [code]public unsafe void InitShadowMap(GL gl) { // Generate framebuffer _shadowMapFbo = gl.GenFramebuffer(); gl.BindFramebuffer(FramebufferTarget.Framebuffer, _shadowMapFbo);
// Check if framebuffer is complete if (gl.CheckFramebufferStatus(FramebufferTarget.Framebuffer) != GLEnum.FramebufferComplete) { Console.WriteLine("Framebuffer not complete"); }
// Unbind framebuffer gl.BindFramebuffer(FramebufferTarget.Framebuffer, 0); } [/code] Привязка фреймбуфера: [code]public void BindFramebuffer(GL gl) { gl.BindFramebuffer(FramebufferTarget.Framebuffer, _shadowMapFbo); gl.Viewport(0, 0, ShadowWidth, ShadowHeight); gl.Clear(ClearBufferMask.DepthBufferBit); // even just this breaks everything } [/code] И используя все это (Scene.cs): [code]public unsafe void Draw(GL gl, Shader shader) { int[] oldViewport = new int[4]; gl.GetInteger(GetPName.Viewport, (Span)oldViewport); Lights[0].BindFramebuffer(gl); _shadowShader!.Use(gl); var lightSpaceMatrix = Lights[0].GetLightSpaceMatrix(); gl.UniformMatrix4(_shadowShader.GetUniformLocation(gl, ViewMatrixVariableName), 1, false, (float*)&lightSpaceMatrix); // Program.CheckError(); // // Program.CheckError(); // foreach (var obj in Objects) // { // obj.Draw(gl, _shadowShader, false); // } gl.BindFramebuffer(FramebufferTarget.Framebuffer, 0); // Program.CheckError(); shader.Use(gl); // Program.CheckError(); gl.UniformMatrix4(shader.GetUniformLocation(gl, LightSpaceMatrixVariableName), 1, false, (float*)&lightSpaceMatrix); // Program.CheckError(); gl.Viewport(oldViewport[0], oldViewport[1], (uint)oldViewport[2], (uint)oldViewport[3]); // Program.CheckError(); // gl.ActiveTexture(TextureUnit.Texture15); // Program.CheckError(); gl.BindTexture(TextureTarget.Texture2D, Lights[0].ShadowMap); // Program.CheckError(); gl.Uniform1(shader.GetUniformLocation(gl, ShadowMapVariableName), 15); // Program.CheckError(); // gl.Clear(ClearBufferMask.DepthBufferBit | ClearBufferMask.ColorBufferBit); SetViewerPosition(gl, shader); SetViewMatrix(gl, shader); SkyBox?.Draw(gl, shader); foreach (var obj in Objects) { obj.Draw(gl, shader); } } [/code] Даже если я не добавляю ничего, связанного с шейдером, тень испортится, поэтому я не думаю, что шейдер может быть плохим (я также следовал руководству LearnOpenGL для это), но это в Ресурсах/
Я использую Silk.Net для интерфейса OpenGL, загружаю файлы .obj для данных модели и материалов.
Все работает так, как мне хотелось, и попытался добавить ко всему этому отображение теней (следуя руководству LearnOpenGL) . Если я привязываю...
У меня возникли проблемы с поддержкой юникода в C++, и у меня странное поведение. Если я загружаю строку текста в Юникоде из файла, я могу сохранить ее внутри обычной строки и без проблем вывести на стандартный вывод. Но если я использую строковый...
У меня возникли проблемы с поддержкой юникода в C++, и у меня странное поведение. Если я загружаю строку текста в Юникоде из файла, я могу сохранить ее внутри обычной строки и без проблем вывести на стандартный вывод. Но если я использую строковый...
Я новичок в составлении реактивных ранцев и пытаюсь реализовать прокручиваемую таблицу данных с помощью Jetpack LazyColumn/LazyRow. Первая строка и первый столбец всей таблицы должны быть прикреплены.
class MainActivity : ComponentActivity() {...
Я просматривал в качестве упражнения, но забыл изменить форму тензоров. в этих строках
y_train = torch.tensor(y_train).float().reshape(-1,1) # column vector
y_test = torch.tensor(y_test).float().reshape(-1,1)