小编Cpp*_*ter的帖子

有没有办法将标准输出设置为二进制模式?

有没有办法将标准输出设置为二进制模式?在没有任何操作的stdout模式中,从我的调试问题开始,我认为它处于文本模式,是真的吗?

我试过功能:

freopen(NULL,"wb",stdout)

但是当我这样做时,我的程序崩溃了.

c++

8
推荐指数
1
解决办法
4379
查看次数

OpenGL将纹理映射到球体

我有OpenGL程序,我想用地球的位图纹理球体.我在Blender中准备了网格并将其导出到OBJ文件中.程序正确加载适当的网格数据(顶点,uv和法线)和位图 - 我已经使用骨位图检查了纹理立方体.

我的程序是纹理球体,但不正确(或以我不指望的方式).此球体的每个三角形都包含此位图的变形副本.我检查了位图,uv似乎没问题.我尝试了很多尺寸的位图(2的幂,2的倍数等).

这是纹理:

地球纹理

我的程序的屏幕截图(就像它会忽略我的UV坐标):

在此输入图像描述

Blender中UV的映射我用这种方式完成:

在此输入图像描述

加载后的代码设置纹理(除了代码将纹理添加到VBO-我认为没关系):

  GLuint texID;
  glGenTextures(1,&texID);
  glBindTexture(GL_TEXTURE_2D,texID);
  glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,width,height,0,GL_BGR,GL_UNSIGNED_BYTE,(GLvoid*)&data[0]);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
Run Code Online (Sandbox Code Playgroud)

是否需要任何额外的代码才能正确映射此纹理?

[编辑]初始化纹理(之前提供的代码在LoadTextureBMP_custom()函数中)

bool Program::InitTextures(string texturePath)
{
  textureID = LoadTextureBMP_custom(texturePath);
  GLuint TBO_ID;
  glGenBuffers(1,&TBO_ID);
  glBindBuffer(GL_ARRAY_BUFFER,TBO_ID);
  glBufferData(GL_ARRAY_BUFFER,uv.size()*sizeof(vec2),&uv[0],GL_STATIC_DRAW);
  return true;
}
Run Code Online (Sandbox Code Playgroud)

我的主循环:

bool Program::MainLoop()
{
  bool done = false;
  mat4 projectionMatrix;
  mat4 viewMatrix;
  mat4 modelMatrix;
  mat4 MVP;

  Camera camera;
  shader.SetShader(true);

  while(!done)
  {
    if( (glfwGetKey(GLFW_KEY_ESC)))
      done = true;
    if(!glfwGetWindowParam(GLFW_OPENED))
      done = true;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Tutaj przeksztalcenia macierzy
    camera.UpdateCamera();
    modelMatrix = mat4(1.0f);
    viewMatrix = camera.GetViewMatrix();
    projectionMatrix …
Run Code Online (Sandbox Code Playgroud)

c++ opengl texturing

7
推荐指数
1
解决办法
9395
查看次数

OpenGL中的多维数据集映射

我尝试用6位图映射立方体以实现天空盒效果.我的问题是,一个纹理映射到立方体的每个面.我已经检查了gDEBugger,在立方体纹理内存中我只有一个图像(因为我尝试加载六个图像).

代码准备纹理:

bool Texture::LoadCubicTexture(vector<string> filenameTable)
{
  glGenTextures(1,&texID);
  glBindTexture(GL_TEXTURE_CUBE_MAP,texID);

  glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_R,GL_CLAMP_TO_EDGE);

  int i = 0;
  vector<string>::iterator vsit;

  // There is always six filenames
  for(vsit=filenameTable.begin();vsit!=filenameTable.end();++vsit)
  {
    string filename = *vsit;
    BMPData* bmpData = LoadTextureBMPData_custom(filename);
    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+i,0,GL_RGB,bmpData->width,bmpData->height,0,GL_BGR,GL_UNSIGNED_BYTE,&(bmpData->data[0]));
    i++;
    delete daneObrazu;
  }
  glGenerateMipmap(GL_TEXTURE_CUBE_MAP);

  return true;
}
Run Code Online (Sandbox Code Playgroud)

VS:

#version 330 core

in vec3 vVertexPos;
in vec3 vertexUV;

out vec3 vCoords;
uniform mat4 MVP;

void main()
{
  vCoords = normalize(vertexUV);
  gl_Position = MVP * vec4(vVertexPos,1.0);
}
Run Code Online (Sandbox Code Playgroud)

FS:

#version 330 core

in vec3 vCoords;
uniform …
Run Code Online (Sandbox Code Playgroud)

opengl texture-mapping

6
推荐指数
1
解决办法
5944
查看次数

GLSL:无法获得制服位置

我的问题是事实上,我不能得到一些制服位置,当别人的位置我得到没有问题.

例如,我有VS制服称为"MVP"和"模型",我有"MVP"位置没有问题,但我没有"模型"位置,我对称使用.以同样的方式,我无法从FS中的Light结构获得字段的位置.

它的代码将数据传递到着色器:

bool Shader::SetShaderParameters(mat4 MVPMatrix,mat4 Model,GLint textureUnit)
{
  GLuint matrixLocation = glGetUniformLocation(programID,"MVP");
  if(matrixLocation==-1)
    return false;
  glUniformMatrix4fv(matrixLocation,1,GL_FALSE,&MVPMatrix[0][0]);
  GLuint modelLocation = glGetUniformLocation(programID,"Model");
  if(modelLocation==-1)
    return false;
  glUniformMatrix4fv(modelLocation,1,GL_FALSE,&Model[0][0]);
  return true;
}

bool Shader::SetShaderLights(vec3 lightColor,vec3 ambientIntensity,vec3 direction,vec3 diffuseIntensity)
{
    GLuint lightColorLocation = glGetUniformLocation(programID,"light.lightColor");
    if(lightColorLocation==-1)
        return false;
    glUniform3fv(lightColorLocation,1,&lightColor[0]);
    GLuint ambientIntensityLocation = glGetUniformLocation(programID,"light.ambientIntensity");
    if(ambientIntensityLocation==-1)
        return false;
    glUniform3fv(ambientIntensityLocation,1,&ambientIntensity[0]);
    GLuint directionLocation = glGetUniformLocation(programID,"light.direction");
    if(directionLocation==-1)
        return false;
    glUniform3fv(directionLocation,1,&direction[0]);
    GLuint diffuseIntensityLocation = glGetUniformLocation(programID,"light.diffuseIntensity");
    if(diffuseIntensityLocation==-1)
        return false;
    glUniform3fv(diffuseIntensityLocation,1,&diffuseIntensity[0]);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这是着色器的代码:

VS:

#version 440 core

layout(location=0) in vec3 vertexPosition;
layout(location=1) …
Run Code Online (Sandbox Code Playgroud)

opengl glsl

5
推荐指数
2
解决办法
4453
查看次数

在顶点着色器中将法线转换为视图空间

当我们想在顶点着色器中计算光时,我们需要在视图空间中的法向量。一般来说,它看起来如下(来自 OpenGL Superbible 5th):

// normalMatrix is retrieved from GLMatrixStack modelViewMatrix
vec3 vEyeNormal = normalMatrix * vNormal
Run Code Online (Sandbox Code Playgroud)

我想在不使用 GLT 库的情况下编写程序。在另一个来源(http://en.wikibooks.org/wiki/GLSL_Programming/GLUT/Diffuse_Reflection)中,我发现了以下公式:

vec3 normalDirection = normalize(m_3x3_inv_transp * v_normal);
Run Code Online (Sandbox Code Playgroud)

变量 m_3x3_inv_transp 计算如下:

glm::mat3 m_3x3_inv_transp = glm::transpose(glm::inverse(glm::mat3(mesh.object2world)));
Run Code Online (Sandbox Code Playgroud)

我意识到:

我的问题是为什么在反转和转置矩阵后我得到 NormalMatrix 以及如何通过反转计算来检查它?

c++ opengl matrix

3
推荐指数
1
解决办法
5201
查看次数

C++写入字节的文件向量

我有:

typedef unsigned char;
std::vector<byte> data;
Run Code Online (Sandbox Code Playgroud)

我试图以这种方式保存文件中的数据(但我有错误):

fstream file(filename,ios::out);
file.write(&data, data.size());
Run Code Online (Sandbox Code Playgroud)

如何处理或转换数据以将其写入文件中.

c++

3
推荐指数
2
解决办法
6049
查看次数

用Python表示没有日期的时间的结构

Python数据结构中是否仅能表示小时和秒,而没有其他信息,如果没有,那么在我的情况下哪种结构最好使用?

python time

3
推荐指数
2
解决办法
528
查看次数

检查istream :: read()读取的字节数

是否有可能性(任何方法)检查​​由下面的函数读取的字节数:

istream& read (char* s, streamsize n);
Run Code Online (Sandbox Code Playgroud)

c++ istream

2
推荐指数
1
解决办法
1421
查看次数

如何从urllib readlines()

我有使用http的程序,我想从http读取数据:

data = urllib.request.urlopen(someAddress).read()
Run Code Online (Sandbox Code Playgroud)

并通过readlines()方法为它准备行列表,如返回行.

怎么做?

python http

1
推荐指数
1
解决办法
1万
查看次数

C++中的对象内存布局以及它的结构如何依赖于大多数平台

我在C++中有两个类:

class Base
{
  int baseField;
 public:
  Base();
  ~Base();
  T BaseMethod();
  virtual SomeMethod()=0;
};

class Derived : public Base
{
  int derivedField;
 public:
  Derived()
  ~Derived();
  T DerivedMethod();
  virtual SomeMethod() {...}; // Some implementation
};
Run Code Online (Sandbox Code Playgroud)

我的问题是它是如何在内存中表示的,即这个类的指针,vptr(vtable)字段方法指针在哪里.好的,它依赖于编译器,但有一些不成文的标准.我对Visual Studio和gcc编译器最感兴趣.

[编辑:我用一个虚拟方法来改进示例,之前没有任何虚拟]

有没有一些关于这个主题的书籍

c++ oop this vtable

0
推荐指数
1
解决办法
2320
查看次数

Shader类中的语法错误?

我有编译程序的问题,我找不到任何错误.有问题的代码和错误消息如下所示:

我的错误消息:

- 错误2错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持默认int C:\用户\ codasm \桌面\诺威projekty\glfwframework1\system.h中9 1 GLFWFramework1

- 错误1错误C2143:语法错误:缺少';' 在' 'c:\ users\codasm\desktop \nowe projekty\glfwframework1\system.h之前9 1 GLFWFramework1*

将我链接到System.h第9行的错误消息,我不明白什么是错的:

Shader* shader;
Run Code Online (Sandbox Code Playgroud)

system.h中:

#ifndef System_h
#define System_h

#include "Core.h"

class System
{
    GLFWwindow* window;
    Shader* shader;
    // GLuint shader;
    GLenum error;
    GLuint VAO, VBO, TBO;
  vector<vec3> vertices;
    vector<vec2> uvs;
    vector<vec3> normals;
 public:
    System();
    ~System();
  bool InitWindow();
    bool InitExtensions();
    bool InitShaders();
    bool InitVertices();
    bool InitTextures();
    bool InitModels();

    void Resize(GLFWwindow* window);
    void BeginScene();
    void EndScene(GLFWwindow* window);
    void Display(GLFWwindow*);

    void Run();

    void …
Run Code Online (Sandbox Code Playgroud)

c++ opengl

0
推荐指数
1
解决办法
172
查看次数

如何在Python中对列表进行排序

我有Python数据:

[
 ['prod_nominal.BloomConnectorForex.HQ', '192.168.7.14', '2670', 'branches/release'],
 ['prod_nominal.BloomConnectorFIX.HQ', '192.168.7.14', '2670', 'branches/release'],
 ['prod_nominal.IntegralConnector.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.CitiConnector.HQ', '192.168.1.77', '2717', 'trunk'], 
 ['prod_nominal.SaxoConnector.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.InstrumentMonitor.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.PriceMonitor.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.CFH_GM_Connector.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.CFHConnectorMD.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.FXOpenConnector.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.CFHConnector.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.CFH_GM_Demo_Connector.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.FXCMConnector.HQ', '192.168.1.77', '2770', 'trunk'], 
 ['prod_nominal.LMAXConnector.HQ', '192.168.1.77', '2670', 'branches/release'], 
 ['prod_nominal.wide_spread_remover.HQ', '192.168.1.77', '2670', 'branches/release']
]
Run Code Online (Sandbox Code Playgroud)

我想按字段用数字(在IP地址之后)对此列表的元素进行排序.Python中有谓词或类似技术吗?我是Python的新手.

python sorting

0
推荐指数
1
解决办法
97
查看次数

先发生什么,铸造或移位[C++]

首先在C++,转换或转换中发生了什么?

(dword)header[2]<<8
Run Code Online (Sandbox Code Playgroud)

c++

-3
推荐指数
1
解决办法
505
查看次数

标签 统计

c++ ×8

opengl ×5

python ×3

glsl ×1

http ×1

istream ×1

matrix ×1

oop ×1

sorting ×1

texture-mapping ×1

texturing ×1

this ×1

time ×1

vtable ×1