我正在尝试将属性传递给我的顶点着色器但是由于某种原因它在第三个属性位置上给我一个-1我要求openGl通过glGetAttribLocation()来检索.目前它一直给我一个-1的texCoord属性,如果我切换texAttrib和colAttrib(切换代码中的行)它给我一个-1颜色属性而不是纹理,我不明白为什么?由于-1传递给glVertexAttribPointer,我得到1281 OpenGL错误:GL_INVALID_VALUE.
我的顶点着色器:
#version 150
in vec3 position;
in vec3 color;
in vec2 texcoord;
out vec3 Color;
out vec2 Texcoord;
void main()
{
Color = color;
Texcoord = texcoord;
gl_Position = vec4(position.x, position.y, position.z, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
OpenGL代码:
basicShader.Use();
// Buffers and shaders
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &vbo);
// Make it active vbo
glBindBuffer(GL_ARRAY_BUFFER, vbo);
// Build basic triangle
float vertices[] = {
// position // color // textures
-0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, // Top-left
0.5f, 0.5f, …Run Code Online (Sandbox Code Playgroud) 我有一个正常的映射问题.我在通过ASSIMP库加载的每个模型上都有纹理和普通纹理.我在ASSIMP库的帮助下计算每个对象的切向量,所以这些应该没问题.这些对象与法线贴图完美配合,但是一旦我开始平移其中一个对象(从而影响带有平移的模型矩阵),灯光就会失败.正如您在图像上看到的那样,地板(沿y轴向下平移)似乎失去了大部分漫射光,而其镜面光照方向错误(应该在灯泡和播放器位置之间)

它可能与普通矩阵有关(尽管翻译应该丢失),也许在着色器中使用了错误的矩阵.我没有想法,希望你能对这个问题有所了解.
顶点着色器:
#version 330
layout(location = 0) in vec3 position;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec3 tangent;
layout(location = 3) in vec3 color;
layout(location = 4) in vec2 texCoord;
// fragment pass through
out vec3 Position;
out vec3 Normal;
out vec3 Tangent;
out vec3 Color;
out vec2 TexCoord;
out vec3 TangentSurface2Light;
out vec3 TangentSurface2View;
uniform vec3 lightPos;
uniform vec3 playerPos;
// vertex transformation
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main() …Run Code Online (Sandbox Code Playgroud) 我正在世界空间坐标中实现法线/凹凸贴图(我发现那些更容易使用)并且我的照明工作正常而没有法线贴图,但是当引入法线贴图(以及使用TBN矩阵计算的新矢量)时,镜面反射分量我的灯光已关闭.
镜面反射分量不在相机和光线之间,应该是错误的.但是,查看我的代码我找不到任何问题.切线和切线来自ASSIMP对象加载器,eyePos和lightPos也是世界坐标.
由于照明看起来在镜面反射部分看起来是正确的(显示了凹凸贴图),我认为它与切线空间变换有关?
这是一张展示问题的图片:

顶点着色器:
#version 330
layout (location = 0) in vec4 vertex;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec3 tangent;
layout(location = 3) in vec3 bitangent;
layout(location = 5) in vec2 texCoord;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform vec3 lightPos;
uniform vec3 eyePos;
out vec3 Position;
out vec2 TexCoord;
out vec3 tangentLightDir;
out vec3 tangentViewDir;
void main()
{
gl_Position = projection * view * model * vertex;
// Position
Position …Run Code Online (Sandbox Code Playgroud) 我在 C# 中有一个ExpandoObject,它已经用大量的字段/属性进行了初始化,我想在 PowerShell 环境中使用这个对象。当我在 PowerShell 中检索这样的对象时,它不会按原样显示所有字段/属性,而是将它们(基于 ExpandoObjects 中的底层字典结构)显示为键/值对。
就我的实现而言,这是非常有问题的,我找不到任何方法将此键/值对转换为字段/属性,就像这样的对象应该表现的那样。将 ExpandoObject 转换为 Object 也不起作用。我错过了什么吗?
我的自定义 DLL (DataCollect.dll) 中的合并函数
public static dynamic merge(dynamic obj)
{
// FIRST : Get the objects out of the table layout.
dynamic Data = retrieveObject(obj);
// SECOND : Check if we're dealing with an array or with a single object.
bool isCollect = isCollection(Data);
// THIRD : Merge objects differently depending on (bool)isCollect.
// The functions below are merge functions that make …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2012 Ultimate c#并使用设计器创建Crystal报表.我想在头部添加一个图像:右键单击 - >插入 - >图片,然后我选择图片(png/bmp),没有任何反应.我尝试使用OLE链接到图像文件,但(除了OLE对象)没有图像显示.
我检查了网络上的所有内容,但无法找到问题的解决方案.关于什么可以导致这个或如何绕过这个问题的任何建议或想法?
目前我正在尝试使用在搅拌器中制作的圆柱体对象上进行照明(在z轴上缩放的基本圆柱体,不再进行进一步处理)并使用以下选项在via Assimp中加载此对象aiProcess_GenSmoothNormals | aiProcess_Triangulate | aiProcess_CalcTangentSpace | aiProcess_FlipUVs.在blender的wavefront导出选项中,triangulate选项已设置.
问题是在cilinder上进行了一些缩放(通常高于某个缩放阈值)我的OpenGL实现显示反转的法线(我有一个显示法线的几何着色器),并且因为它反转法线,所以也反转了光照.这种情况只发生在具有一定比例的这些圆柱状物体上(至少,只有它发生在我身上).除了这些圆柱体外,我场景中的每个其他对象都能正常工作
我不知道这是否与Assimp如何加载.obj文件,或者blender在导出时处理法线的方式有关,或者它可能与大的z-scale有关,因为它会破坏正常的插值或任何东西?在下面你会找到反转法线(左)和正确法线(右)的图像,其中反正常对象通过搅拌器完成大的z刻度.

我这次手动在搅拌器中对气缸进行三角测量,并验证了它们的法线.所有气缸的法线都是正确的,然后按原样输出.然而,现在一个管道具有正确的照明,但是其他管道仍然具有倒转的法线,而它们具有与工作管道相同的三角测量,这是令人困惑的.下图显示了柱面的法线.

好的,我想出了什么.一旦我开始将正确点亮的管道缩放到与错误管道(左侧管道)完全相同的比例,然后再次反转正确管道的法线(在我的OpenGL程序中反转,在Blender中,法线仍然看起来很好).因此,气缸长度的比例肯定与他们的法线相反有关,虽然我不知道那可能是什么.
我最近一直在努力解决多个文件包含错误.我正在开发一个太空街机游戏并将我的类/对象划分为不同的.cpp文件,并确保一切仍然可以正常工作我已经构建了以下头文件:
#ifndef SPACEGAME_H_INCLUDED
#define SPACEGAME_H_INCLUDED
//Some Main constants
#define PI 3.14159265
//Standard includes
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <vector>
using namespace std;
//SDL headers
#include "SDL.h"
#include "SDL_opengl.h"
#include "SDL_mixer.h"
#include "SDL_image.h"
//Classes and project files
#include "Player.cpp"
#include "planet.cpp"
#include "Destructable.cpp"
#include "PowerUp.cpp"
#include "PowerUp_Speed.cpp"
#endif // SPACEGAME_H_INCLUDED
Run Code Online (Sandbox Code Playgroud)
在我的每个文件的顶部,我包括(仅)此头文件,其中包含所有.cpp文件和标准包含.
但是,我有一个Player/Ship类,它给了我' 重新定义Ship类 '类型的错误.我最终通过在类定义文件中包含预处理器#ifndef和#define命令找到了一种解决方法:
#ifndef PLAYER_H
#define PLAYER_H
/** Player class that controls the flying object used for the space game …Run Code Online (Sandbox Code Playgroud) 我正在研究法线贴图的实现,通过ASSIMP库计算切线向量.
法线贴图似乎在具有接近单位矩阵的模型矩阵的对象上完美地起作用.只要我开始翻译和缩放,我的照明就好了.正如您在图片中看到的那样,法线贴图在容器立方体上完美地工作,但是在大地板上的照明失败(镜面光的方向应朝向播放器,而不是朝向容器).

只要我开始更改模型矩阵(通过翻译),我感觉它与光的位置(目前从x = -10到x = 10,随着时间的推移)在某种程度上没有正确地包含在计算中/缩放).我发布了所有相关的代码,并希望你们能够以某种方式看到我失踪的东西,因为我已经盯着我的代码好几天了.
顶点着色器
#version 330
layout(location = 0) in vec3 position;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec3 tangent;
layout(location = 3) in vec3 color;
layout(location = 4) in vec2 texCoord;
// fragment pass through
out vec3 Position;
out vec3 Normal;
out vec3 Tangent;
out vec3 Color;
out vec2 TexCoord;
out vec3 TangentSurface2Light;
out vec3 TangentSurface2View;
uniform vec3 lightPos;
// vertex transformation
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection; …Run Code Online (Sandbox Code Playgroud) c++ ×6
opengl ×5
glsl ×3
lighting ×3
bump-mapping ×2
c# ×2
assimp ×1
blender ×1
dictionary ×1
file ×1
image ×1
inclusion ×1
normals ×1
powershell ×1
redefinition ×1
shader ×1
types ×1