我有一个带有_color制服和采样器的着色器.现在我只想在没有设置采样器的情况下使用_color进行绘制.有没有办法在着色器中找出我们的内容?(不幸的是,当未分配时,采样器返回1,1,1,1,这使得通过alpha混合它是不可能的)
我试图压缩像单声道这样的一些数据:
public static string Save(FlightProgram program, bool compressed)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter f = new BinaryFormatter();
if (compressed)
{
using (DeflateStream gz = new DeflateStream(ms, CompressionMode.Compress))
{
f.Serialize(gz, program);
}
}
else
{
f.Serialize(ms, program);
}
return Convert.ToBase64String(ms.ToArray()).Replace('/', '_');
}
}
Run Code Online (Sandbox Code Playgroud)
我只是得到异常"CreateZStream".没有内在的例外.这里发生了什么 ?
堆栈跟踪:
Could not save flight program: CreateZStream at at (wrapper managed-to-native) System.IO.Compression.DeflateStream:CreateZStream (System.IO.Compression.CompressionMode,bool,System.IO.Compression.DeflateStream/UnmanagedReadOrWrite,intptr)
at System.IO.Compression.DeflateStream..ctor (System.IO.Stream compressedStream, CompressionMode mode, Boolean leaveOpen, Boolean gzip) [0x00000] in <filename unknown>:0
at System.IO.Compression.DeflateStream..ctor (System.IO.Stream compressedStream, CompressionMode …Run Code Online (Sandbox Code Playgroud) 我正试图在vs2013中使用libpng 1.2.10读取一个png文件.我下载了最新的zlib并编译了pnglib,效果很好.现在我正在尝试加载文件:
int *w = &width;
int *h = &height;
const char* name = file.c_str();
FILE *png_file = fopen(name, "rb");
if (!png_file)
{
std::cerr << "Could not open " + file << std::endl;
return;
}
unsigned char header[PNG_SIG_BYTES];
fread(header, 1, PNG_SIG_BYTES, png_file);
if (png_sig_cmp(header, 0, PNG_SIG_BYTES))
{
std::cerr << "PNG signature fail " + file << std::endl;
return;
}
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if(png_ptr == NULL)
{
std::cerr << "PNG read fail " + file << std::endl; …Run Code Online (Sandbox Code Playgroud) 我有以下数据:
{ "数据":{ "ID": "7IaWnXo", "标题":空, "说明":NULL, "日期时间":1397926970, "类型": "图像/ PNG", "动画片":假,"宽度"60," 高度 ":60," 大小 ":1277," 意见 ":0," 带宽 ":0," 最爱 ":假的," NSFW ":空," 节 ":空," deletehash": "KYIfVnHIWWTPifh", "链接": "http://i.imgur.com/7IaWnXo.png"}, "成功":真实的, "身份":200}
而我正在尝试将其序列化为:
public struct ImageInfoContainer
{
public ImageInfo data {get; set;}
bool success { get; set; }
string status { get; set; }
}
public struct ImageInfo
{
public string id {get; set;}
public string title { get; set; }
public string url { get; set; }
public string …Run Code Online (Sandbox Code Playgroud) 所以我有一个将网格位置转换为全局空间的方法:
public Vector3 GridToGlobal(IVector3 gridPos)
{
Vector3 globalPos = new Vector3(gridPos.x, gridPos.y, gridPos.z);
globalPos *= Scale;
globalPos = Container.transform.rotation * globalPos;
return globalPos;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我想做相反的事情时,我该如何将向量旋转到网格空间中?
public IVector3 GlobalToGrid(Vector3 globalPos)
{
globalPos -= Container.transform.position;
globalPos = Container.transform.rotation * globalPos; //this will obviously rotate in the wrong direction
globalPos /= Scale;
return new IVector3((int)Mathf.Round(globalPos.x), (int)Mathf.Round(globalPos.y), (int)Mathf.Round(globalPos.z));
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我对c ++对象感到困惑.如果一个对象必须用参数初始化(大多数对象都这样做),我应该创建一个带参数的构造函数,因此在存储时总是创建指向我的对象的指针,或者我应该有一个带有Init()方法的空构造函数初始化对象所需的参数,以便我可以为我的对象设置非指针字段?
编辑:我的意思是:
//A.h
class A
{
public:
A(int x);
}
//B.h
class B
{
private:
A myobject;
}
Run Code Online (Sandbox Code Playgroud)
将抛出IntelliSense:类"A"不存在默认构造函数
所以我可以这样做:
//B.h
class B
{
private:
A* myobject;
}
Run Code Online (Sandbox Code Playgroud)
要么
//A.h
class A
{
public:
A(void);
void Init(int x);
}
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的做法?
是否只允许使用常量,或者我可以将其用于循环索引或任何其他动态值?
我像这样创建纹理:
this->width = width;
this->height = height;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
switch (components) {
case 1: glTexImage2D(GL_TEXTURE_2D, 0, GL_R16F, width, height, 0, GL_RED, GL_HALF_FLOAT, 0); break;
case 2: glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, width, height, 0, GL_RG, GL_HALF_FLOAT, 0); break;
case 3: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, width, height, 0, GL_RGB, GL_HALF_FLOAT, 0); break;
case 4: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, height, 0, GL_RGBA, GL_HALF_FLOAT, 0); break;
default: Log::Write("Unknown …Run Code Online (Sandbox Code Playgroud) 我使用以下代码创建纹理+帧缓冲区(在C#中使用openTK):
public void Create(int width, int height, SurfaceFormat format)
{
bool multisample = format.Multisample > 1;
int samples = Math.Max(1, Math.Min(format.Multisample, 4));
TextureTarget target = multisample ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D;
Width = width;
Height = height;
textureHandle = GL.GenTexture();
//bind texture
GL.BindTexture(target, textureHandle);
Log.Error("Bound Texture: " + GL.GetError());
GL.TexParameter(target, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
GL.TexParameter(target, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
GL.TexParameter(target, TextureParameterName.TextureWrapS, (int)format.WrapMode);
GL.TexParameter(target, TextureParameterName.TextureWrapT, (int)format.WrapMode);
Log.Error("Created Texture Parameters: " + GL.GetError());
if (format.Multisample < 2)
GL.TexImage2D(target, 0, format.InternalFormat, Width, Height, 0, format.PixelFormat, format.SourceType, format.Pixels);
else …Run Code Online (Sandbox Code Playgroud) 我有一个结构:
struct Handle
{
public:
const unsigned long Id;
const std::type_index Index;
Handle() : Id(-1), Index(std::type_index(typeid(Event))){}
Handle(unsigned long id, std::type_index index) : Id(id), Index(index) {}
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将它分配给我得到的变量时
错误10错误C2582:'eventHandler :: Handle'中的'operator ='函数不可用
为什么?(我正在使用结构,因为据我所知,它们作为数据类型处理,可以从函数返回而不用new创建.这是正确的吗?)