幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

OpenSceneGraph纹理API指南

  前面的教程中,我们用彩虹的所有颜色画了一个正方形。然而,还有另一种成为纹理映射的技术,将光栅二维图像应用于三维几何。在这种情况下,效果不是针对几何体的顶点,而是通过栅格化场景更改获得的所有像素的数据。这种技术可以显着增加最终图像的真实感和细节。
  OSG支持多种纹理属性和纹理模式。但是,在讨论纹理之前,让我们先谈谈OSG如何在光栅图像上运行。为了处理光栅图像,OSG提供了一个特殊的类osg::Image,它在其自身中存储图像数据,最终用于对象的纹理处理。1、光栅图像数据的表示
  从磁盘加载图像的最佳方法是使用osgDB::readImageFile()调用。它与osg::readNodeFile()调用非常相似。如果我们有一个名为picture。bmp的位图,那么它的加载将如下所示:osg::refptrosg::ImageimageosgDB::readImageFile(picture。bmp);
  如果图像加载正确,则指针将有效,否则函数将返回NULL。加载图像后,我们可以使用以下公共方法获取有关图像的信息。t(),s()和r()返回图像的宽度、高度和深度。data()返回指向原始图像数据的unsignedchar指针。通过此指针,开发人员可以直接影响图像数据。你可以使用getPixalFormat()和getDataType()方法了解图像数据的格式。它们返回的值等效于OpenGL函数glTexImage()的格式和类型的参数。例如,如果图片具有像素格式GLRGB并且类型为GLUNSIGNEDBYTE,则使用三个unsignedchar类型的独立元素来表示RGB颜色组件:
  你可以创建新的图像对象并为其分配内存。osg::refptrosg::Imageimagenewosg::Image;imageallocateImage(s,t,r,GLRGB,GLUNSIGNEDBYTE);unsignedcharptrimagedata();
  这里s、t、r是图像的尺寸;GLRGB设置像素格式,GLUNSIGNEDBYTE设置数据类型以描述单个颜色分量。所需大小的内部数据缓冲区在内存中分配,如果没有对此映像的引用,则会自动销毁。
  OSG插件系统支持下载几乎所有流行的图像格式:。jpg,。bmp,。png,。tif等。通过编写自己的插件,此列表很容易扩展,但这是另一个单独的主题。2、纹理基础
  要将纹理应用于三维模型,必须执行多个步骤:将顶点的纹理坐标分配给几何对象。在三维设计师的环境中,这称为UV扫描。为1D、2D、3D或立方体纹理创建纹理属性对象。为纹理属性设置一个或多个图像。将纹理属性和模式附加到应用于正在绘制的对象的状态集。
  OSG定义了一个osg::Texture类来封装各种纹理。子类包括osg::Texture1D,osg::Texture2D、osg::Texture3D和osg::TextureCubeMap,它们代表了OpenGL中采用的各种纹理技术。
  osg::Texture类最常用的方法是setImage(),它定义了纹理中使用的图像,例如osg::refptrosg::ImageimageosgDB::readImageFile(picture。bmp);osg::refptrosg::Texture2Dtexturenewosg::Texture2D;texturesetImage(image。get());
  或者,可以将图像对象直接传递给纹理类构造函数。osg::refptrosg::ImageimageosgDB::readImageFile(picture。bmp);osg::refptrosg::Texture2Dtexturenewosg::Texture2D(image。get());
  可以通过调用getImage()方法从纹理对象中检索图像。
  另一个要点是设置对象osg::Geometry中每个顶点的纹理坐标。这些坐标的传输通过osg::Vec2Array和osg::Vec3Array数组通过调用setTexCoordArray()方法进行。
  设置纹理坐标后,我们需要设置纹理槽号(unit),因为OSG支持在同一几何体上施加多个纹理。使用一个纹理时,unit的值始终为0。例如,以下代码演示了单元0几何图形的纹理坐标分配osf::refptrosg::Vec2Arraytexcoordnewosg::Vec2Array;texcoordpushback(osg::Vec2(。。。));。。。geomsetTexCoordArray(0,texcoord。get());
  之后,我们可以向状态集添加一个纹理属性,自动包括相应的纹理模式(在我们的示例中为GLTEXTURE2D),并将该属性应用于包含几何体的几何体或节点geomgetOrCreateStateSet()setTextureAttributeAndModes(texture。get());
  请注意,OpenGL管理显卡图形内存中的图像数据,但osg::Image对象以及相同的数据位于系统内存中。结果,我们将面临这样一个事实,即我们拥有相同数据的两个副本,占用了该过程的内存。如果此图像未由多个纹理属性共享,则可以在OpenGL将其传输到视频适配器内存后立即将其从系统内存中删除。若要启用此功能,osg::Texture类提供了适当的方法。texturesetUnRefImageDataAfterApply(true);3、加载并应用2D纹理
  最常用的2D纹理技术是在三维表面的边缘叠加二维图像(或图像)。考虑将单个纹理应用于四边形的最简单示例。
  main。h:ifndefMAINHdefineMAINHincludeosgTexture2DincludeosgGeometryincludeosgDBReadFileincludeosgViewerViewerendif
  main。cppincludemain。hintmain(intargc,charargv〔〕){(void)argc;(void)argv;osg::refptrosg::Vec3Arrayverticesnewosg::Vec3Array;verticespushback(osg::Vec3(0。5f,0。0f,0。5f));verticespushback(osg::Vec3(0。5f,0。0f,0。5f));verticespushback(osg::Vec3(0。5f,0。0f,0。5f));verticespushback(osg::Vec3(0。5f,0。0f,0。5f));osg::refptrosg::Vec3Arraynormalsnewosg::Vec3Array;normalspushback(osg::Vec3(0。0f,1。0f,0。0f));osg::refptrosg::Vec2Arraytexcoordsnewosg::Vec2Array;texcoordspushback(osg::Vec2(0。0f,0。0f));texcoordspushback(osg::Vec2(0。0f,1。0f));texcoordspushback(osg::Vec2(1。0f,1。0f));texcoordspushback(osg::Vec2(1。0f,0。0f));osg::refptrosg::Geometryquadnewosg::Geometry;quadsetVertexArray(vertices。get());quadsetNormalArray(normals。get());quadsetNormalBinding(osg::Geometry::BINDOVERALL);quadsetTexCoordArray(0,texcoords。get());quadaddPrimitiveSet(newosg::DrawArrays(GLQUADS,0,4));osg::refptrosg::Texture2Dtexturenewosg::Texture2D;osg::refptrosg::ImageimageosgDB::readImageFile(。。dataImageslz。rgb);texturesetImage(image。get());osg::refptrosg::Geoderootnewosg::Geode;rootaddDrawable(quad。get());rootgetOrCreateStateSet()setTextureAttributeAndModes(0,texture。get());osgViewer::Viewerviewer;viewer。setSceneData(root。get());returnviewer。run();}
  创建边的顶点和法线数组:osg::refptrosg::Vec3Arrayverticesnewosg::Vec3Array;verticespushback(osg::Vec3(0。5f,0。0f,0。5f));verticespushback(osg::Vec3(0。5f,0。0f,0。5f));verticespushback(osg::Vec3(0。5f,0。0f,0。5f));verticespushback(osg::Vec3(0。5f,0。0f,0。5f));osg::refptrosg::Vec3Arraynormalsnewosg::Vec3Array;normalspushback(osg::Vec3(0。0f,1。0f,0。0f));
  创建纹理坐标数组:osg::refptrosg::Vec2Arraytexcoordsnewosg::Vec2Array;texcoordspushback(osg::Vec2(0。0f,0。0f));texcoordspushback(osg::Vec2(0。0f,1。0f));texcoordspushback(osg::Vec2(1。0f,1。0f));texcoordspushback(osg::Vec2(1。0f,0。0f));
  要点在于三维模型的每个顶点对应于二维纹理上的一个点,并且纹理上点的坐标是相对的它们被归一化为图像的实际宽度和高度。我们要将整个加载的图片分别拉伸到正方形上,正方形的角将对应于纹理点(0,0),(0,1),(1,1)和(1,0)。顶点数组中顶点的顺序必须与纹理顶点的顺序相同。
  接下来,创建一个正方形,为几何体分配顶点数组和法线数组:osg::refptrosg::Geometryquadnewosg::Geometry;quadsetVertexArray(vertices。get());quadsetNormalArray(normals。get());quadsetNormalBinding(osg::Geometry::BINDOVERALL);quadsetTexCoordArray(0,texcoords。get());quadaddPrimitiveSet(newosg::DrawArrays(GLQUADS,0,4));
  创建纹理对象并加载用于该对象的图像:osg::refptrosg::Texture2Dtexturenewosg::Texture2D;osg::refptrosg::ImageimageosgDB::readImageFile(。。dataImageslz。rgb);texturesetImage(image。get());
  创建场景的根节点,并将我们创建的几何体加入根节点:osg::refptrosg::Geoderootnewosg::Geode;rootaddDrawable(quad。get());
  最后将纹理属性应用于放置几何体的节点:rootgetOrCreateStateSet()setTextureAttributeAndModes(0,texture。get());
  osg::Texture2D类确定纹理图像大小是否是2的倍数(例如,64x64或256x512),实际上使用OpenGL函数gluScaleImage()自动缩放不适合大小的图像。有一个setResizeNonPowerOfTwoHint()方法可以确定是否调整图像大小。一些视频卡需要图像大小的倍数为2的幂,而类osg::Texture2D支持使用任意纹理大小。4、关于纹理映射模式
  正如我们已经说过的,纹理坐标从0到1规范化。点(0,0)对应于图像的左上角,点(1,1)对应于右下角。如果将纹理坐标设置为大于1,会发生什么情况?
  默认情况下,在OpenGL中,就像在OSG中一样,纹理将在轴的方向上重复,纹理坐标的值将超过单位。例如,这种技术通常用于创建长砖墙的模型,使用小纹理,在宽度和高度上多次重复其施加。
  此行为可以通过osg::Texture类的setWrap()方法进行控制。第一个参数表示应用混合模式的轴标识符,第二个参数表示映射模式,例如:stexturesetWrap(osg::Texture::WRAPS,osg::Texture::REPEAT);rtexturesetWrap(osg::Texture::WRAPR,osg::Texture::REPEAT);
  如果纹理坐标的值超过1,此代码会清楚地指示引擎沿s轴和r轴重复纹理。按纹理映射模式的完整列表:REPEAT重复纹理。MIRROR镜像重复纹理。CLAMPTOEDGE超出0到1限制的坐标将附加到相应的纹理边缘。CLAMPTOBORDER超出0到1限制的坐标将提供用户定义的边框颜色。5、渲染到纹理
  纹理渲染技术允许开发人员基于一些三维子舞台或模型创建纹理,并将其应用于主场景的表面。这项技术通常被称为纹理烘焙(texturebaking)。
  对于动态烘焙纹理,必须执行三个步骤:创建一个纹理对象以渲染到其中。将场景渲染为纹理。按预期使用生成的纹理。
  我们需要创建一个空的纹理对象。OSG允许你创建给定大小的空纹理。setTextureSize()方法允许你设置纹理的宽度和高度,以及深度作为附加参数(对于3D纹理)。
  若要将纹理渲染为纹理,可以通过调用attach()方法将其附加到相机对象,该方法将纹理对象作为参数。此外,此方法采用一个参数,指示帧缓冲区的哪个部分应呈现为此纹理。例如,若要将颜色缓冲区传输到纹理,可以运行以下代码:cameraattach(osg::Camera::COLORBUFFER,texture。get());
  可用于呈现的帧缓冲区的其他部分包括深度缓冲区DEPTHBUFFER、模具缓冲区STENCILBUFFER以及从COLORBUFFER0到COLORBUFFER15的其他颜色缓冲区。是否存在其他颜色缓冲区及其数量由视频卡型号决定。
  此外,对于渲染纹理的相机,设置投影和视口矩阵的参数,其大小对应于纹理的大小。纹理将在绘制每个帧的过程中更新。请注意,主摄像头不应用于渲染纹理,因为它提供了主场景的渲染,而你只会得到一个黑屏。仅当你执行屏幕外渲染时,可能无法满足此要求。
  6、渲染到纹理的实现示例
  为了演示渲染到纹理,我们将实现这样一个任务:创建一个正方形,将一个正方形纹理拉伸到上面,当然,我们将用我们最喜欢的纹理渲染一个动画场景。实现该示例的程序非常庞大。但是,我仍然给出完整的源代码。
  main。h:ifndefMAINHdefineMAINHincludeosgCameraincludeosgTexture2DincludeosgMatrixTransformincludeosgDBReadFileincludeosgGATrackballManipulatorincludeosgViewerViewerendif
  main。cpp:includemain。hosg::GeometrycreateQuad(constosg::Vec3pos,floatw,floath){osg::refptrosg::Vec3Arrayverticesnewosg::Vec3Array;verticespushback(pososg::Vec3(w2,0。0f,h2));verticespushback(pososg::Vec3(w2,0。0f,h2));verticespushback(pososg::Vec3(w2,0。0f,h2));verticespushback(pososg::Vec3(w2,0。0f,h2));osg::refptrosg::Vec3Arraynormalsnewosg::Vec3Array;normalspushback(osg::Vec3(0。0f,1。0f,0。0f));osg::refptrosg::Vec2Arraytexcoordsnewosg::Vec2Array;texcoordspushback(osg::Vec2(1。0f,1。0f));texcoordspushback(osg::Vec2(1。0f,0。0f));texcoordspushback(osg::Vec2(0。0f,0。0f));texcoordspushback(osg::Vec2(0。0f,1。0f));osg::refptrosg::Geometryquadnewosg::Geometry;quadsetVertexArray(vertices。get());quadsetNormalArray(normals。get());quadsetNormalBinding(osg::Geometry::BINDOVERALL);quadsetTexCoordArray(0,texcoords。get());quadaddPrimitiveSet(newosg::DrawArrays(GLQUADS,0,4));returnquad。release();}intmain(intargc,charargv〔〕){(void)argc;(void)argv;osg::refptrosg::NodesubmodelosgDB::readNodeFile(。。datacessna。osg);osg::refptrosg::MatrixTransformtransform1newosg::MatrixTransform;transform1setMatrix(osg::Matrix::rotate(0。0,osg::Vec3(0。0f,0。0f,1。0f)));transform1addChild(submodel。get());osg::refptrosg::Geodemodelnewosg::Geode;modeladdChild(createQuad(osg::Vec3(0。0f,0。0f,0。0f),2。0f,2。0f));inttexwidht1024;inttexheight1024;osg::refptrosg::Texture2Dtexturenewosg::Texture2D;texturesetTextureSize(texwidht,texheight);texturesetInternalFormat(GLRGBA);texturesetFilter(osg::Texture2D::MINFILTER,osg::Texture2D::LINEAR);texturesetFilter(osg::Texture2D::MAGFILTER,osg::Texture2D::LINEAR);modelgetOrCreateStateSet()setTextureAttributeAndModes(0,texture。get());osg::refptrosg::Cameracameranewosg::Camera;camerasetViewport(0,0,texwidht,texheight);camerasetClearColor(osg::Vec4(1。0f,1。0f,1。0f,1。0f));camerasetClearMask(GLCOLORBUFFERBITGLDEPTHBUFFERBIT);camerasetRenderOrder(osg::Camera::PRERENDER);camerasetRenderTargetImplementation(osg::Camera::FRAMEBUFFEROBJECT);cameraattach(osg::Camera::COLORBUFFER,texture。get());camerasetReferenceFrame(osg::Camera::ABSOLUTERF);cameraaddChild(transform1。get());osg::refptrosg::Grouprootnewosg::Group;rootaddChild(model。get());rootaddChild(camera。get());osgViewer::Viewerviewer;viewer。setSceneData(root。get());viewer。setCameraManipulator(newosgGA::TrackballManipulator);viewer。setUpViewOnSingleScreen(0);camerasetProjectionMatrixAsPerspective(30。0,staticcastdouble(texwidht)staticcastdouble(texheight),0。1,1000。0);floatdist100。0f;floatalpha10。0f3。14f180。0f;osg::Vec3eye(0。0f,distcosf(alpha),distsinf(alpha));osg::Vec3center(0。0f,0。0f,0。0f);osg::Vec3up(0。0f,0。0f,1。0f);camerasetViewMatrixAsLookAt(eye,center,up);floatphi0。0f;floatdelta0。01f;while(!viewer。done()){transform1setMatrix(osg::Matrix::rotate(staticcastdouble(phi),osg::Vec3(0。0f,0。0f,1。0f)));viewer。frame();phidelta;}return0;}
  为了创建一个正方形,我们编写了一个单独的自由函数。osg::GeometrycreateQuad(constosg::Vec3pos,floatw,floath){osg::refptrosg::Vec3Arrayverticesnewosg::Vec3Array;verticespushback(pososg::Vec3(w2,0。0f,h2));verticespushback(pososg::Vec3(w2,0。0f,h2));verticespushback(pososg::Vec3(w2,0。0f,h2));verticespushback(pososg::Vec3(w2,0。0f,h2));osg::refptrosg::Vec3Arraynormalsnewosg::Vec3Array;normalspushback(osg::Vec3(0。0f,1。0f,0。0f));osg::refptrosg::Vec2Arraytexcoordsnewosg::Vec2Array;texcoordspushback(osg::Vec2(1。0f,1。0f));texcoordspushback(osg::Vec2(1。0f,0。0f));texcoordspushback(osg::Vec2(0。0f,0。0f));texcoordspushback(osg::Vec2(0。0f,1。0f));osg::refptrosg::Geometryquadnewosg::Geometry;quadsetVertexArray(vertices。get());quadsetNormalArray(normals。get());quadsetNormalBinding(osg::Geometry::BINDOVERALL);quadsetTexCoordArray(0,texcoords。get());quadaddPrimitiveSet(newosg::DrawArrays(GLQUADS,0,4));returnquad。release();}
  该函数将正方形中心的位置及其几何尺寸作为输入。接下来,创建一个顶点数组、一个法线数组和纹理坐标,然后从函数返回创建的几何体。
  在主程序的正文中,我们将加载Cessna模型:osg::refptrosg::NodesubmodelosgDB::readNodeFile(。。datacessna。osg);osg::refptrosg::MatrixTransformtransform1newosg::MatrixTransform;transform1setMatrix(osg::Matrix::rotate(0。0,osg::Vec3(0。0f,0。0f,1。0f)));transform1addChild(submodel。get());
  现在我们将为主场景创建一个模型一个我们将在其上渲染的正方形:osg::refptrosg::Geodemodelnewosg::Geode;modeladdChild(createQuad(osg::Vec3(0。0f,0。0f,0。0f),2。0f,2。0f));
  使用RGBA像素格式为1024x1024像素的正方形创建空纹理(带Alpha通道的32位三分量颜色):inttexwidht1024;inttexheight1024;osg::refptrosg::Texture2Dtexturenewosg::Texture2D;texturesetTextureSize(texwidht,texheight);texturesetInternalFormat(GLRGBA);texturesetFilter(osg::Texture2D::MINFILTER,osg::Texture2D::LINEAR);texturesetFilter(osg::Texture2D::MAGFILTER,osg::Texture2D::LINEAR);
  将此纹理应用于正方形模型。modelgetOrCreateStateSet()setTextureAttributeAndModes(0,texture。get());
  然后创建一个将烘焙纹理的相机。osg::refptrosg::Cameracameranewosg::Camera;camerasetViewport(0,0,texwidht,texheight);camerasetClearColor(osg::Vec4(1。0f,1。0f,1。0f,1。0f));camerasetClearMask(GLCOLORBUFFERBITGLDEPTHBUFFERBIT);
  视口相机的大小与纹理的大小一致。此外,清洁屏幕和清洁蒙版时不要忘记设置背景颜色,指示清除颜色缓冲区和深度缓冲区。接下来,设置相机以渲染为纹理:camerasetRenderOrder(osg::Camera::PRERENDER);camerasetRenderTargetImplementation(osg::Camera::FRAMEBUFFEROBJECT);cameraattach(osg::Camera::COLORBUFFER,texture。get());
  渲染顺序PRERENDER指示此摄像机在渲染到主场景之前进行渲染。我们将FBO指定为渲染的目标,并将纹理附加到摄像机。现在我们将摄像机设置为在绝对坐标系中工作,作为场景,我们设置了要渲染为纹理的子树:使用附加的Cessna模型进行旋转转换:camerasetReferenceFrame(osg::Camera::ABSOLUTERF);cameraaddChild(transform1。get());
  创建根组节点,向其添加主模型(正方形)和相机处理纹理:osg::refptrosg::Grouprootnewosg::Group;rootaddChild(model。get());rootaddChild(camera。get());
  创建场景查看器:osgViewer::Viewerviewer;viewer。setSceneData(root。get());viewer。setCameraManipulator(newosgGA::TrackballManipulator);viewer。setUpViewOnSingleScreen(0);
  配置相机的投影矩阵通过裁剪金字塔参数的透视投影:camerasetProjectionMatrixAsPerspective(30。0,staticcastdouble(texwidht)staticcastdouble(texheight),0。1,1000。0);
  调整视图矩阵,该矩阵设置相机在空间中的位置:floatdist100。0f;floatalpha10。0f3。14f180。0f;osg::Vec3eye(0。0f,distcosf(alpha),distsinf(alpha));osg::Vec3center(0。0f,0。0f,0。0f);osg::Vec3up(0。0f,0。0f,1。0f);camerasetViewMatrixAsLookAt(eye,center,up);
  最后,我们对场景进行动画处理和显示,在每一帧上改变平面绕Z轴旋转的角度。floatphi0。0f;floatdelta0。01f;while(!viewer。done()){transform1setMatrix(osg::Matrix::rotate(staticcastdouble(phi),osg::Vec3(0。0f,0。0f,1。0f)));viewer。frame();phidelta;}
  最终我们得到一个有趣的结果:
  在此示例中,我们实现了一些场景动画,但请记住,从组织对不同流的数据访问的角度来看,在渲染帧之前或之后扩展run()循环并更改渲染参数并不是一项安全的工作。由于OSG使用多线程渲染,因此有一些常规机制可以在渲染过程中嵌入自己的操作,从而提供对数据的线程安全访问。7、将渲染结果保存到文件
  OSG支持将osg::Image对象附加到相机并将帧缓冲区的内容保存到图像数据缓冲区的功能。之后,可以使用osg::writeImageFile()函数将此数据保存到磁盘:osg::refptrosg::Imageimagenewosg::Image;imageallocateImage(width,height,1,GLRGBA,GLUNSIGNEDBYTE);cameraattach(osg::Camera::COLORBUFFER,image。get());。。。osgDB::writeImageFile(image,savedimage。bmp);8、结束语
  也许文章中描述的材料看起来微不足道。但是,它概述了在OpenSceneGraph中使用纹理的基础知识,这些基础知识基于使用此引擎的更复杂的技术,我们将来肯定会讨论。
  原文链接:http:www。bimant。comblogosgtexturebasics

102天2冠,苏亚雷斯含泪告别母队3万人欢呼,官方致敬离别总是伤感的,哪怕你知道这一天会到来。北京时间11月7日,乌拉圭民族队在主场举办盛大的冠军庆典仪式。苏亚雷斯与队友庆祝队史第49座联赛冠军。35岁的苏神热泪盈眶,含泪向母队和……空间智能化碰撞鸿蒙智联生态,华为携手伙伴创造无限可能2022年11月5日,以《一起创造无限可能新空间再出发》为主题的HarmonyOSConnect伙伴峰会在东莞举办,峰会深度解读了HarmonyOSConnect全面升级给伙伴……大埔茶阳首个电商助农直播间启用茶阳镇乡村振兴直播电商专题培训班开班。广州日报讯(全媒体记者陈家源通讯员黄艺峰摄影报道)婷婷客家美食直播间今天刚刚开播,我们要给大家带来新店开播的福利,来自广东梅州的客家……这六种行为是做人的底线做人的底线在哪里怎么理解人间正道是沧桑这句话被最亲的人算计了,是什么心情呢你手机里最美的天空照片发一张可以吗天不言自高,海不言自深,地不言自厚,人不言自正。无论何时……美国NASA猎户座太空舱安全返回地球美国国家航空航天局(NASA)的猎户座太空船在执行了近26天的绕月飞行任务后成功返回地球。猎户座太空舱重返地球大气层并通过降落伞进一步减缓下降速度后,在太平洋上溅落。……国产X卡口自动对焦镜头怎么样?75mmF1。2超大光圈最近,国产厂商唯卓仕为富士用户带来一支富士X卡口自动对焦镜头AF75mmF1。2Pro,这也是该品牌全新旗舰Pro系列首秀。今天我们一起来看看这支镜头表现如何?是否担得起Pro……威联通发布TS1655NAS搭载英特尔Atom八核处理器IT之家12月27日消息,威联通现已发布啊新款TS1655大容量2。5GbENAS,提供可装载12颗3。5吋硬盘与4颗2。5吋SSD,搭载英特尔Atom八核处理器。IT之……千元新机OPPOA58x正式上市!6GB128GB售1200【手机中国新闻】最近一段时间的手机圈,旗舰新机高调发布,一些千元新机则悄悄上市。12月13日,OPPOA58x千元新机正式上市,它是A58的低配版,其6GB128GB售价120……康养山西森林康养好去处快来种草这些你不知道的秋日美景康养在山西是一种生活方式山西拥有以九大国有林区为主的森林资源富集区森林总面积2200多万亩是华北地区不可多得的绿色明珠森林康养正成为我省森林资源绿……传统名菜茄汁花菜比红烧肉受欢迎,花菜清脆爽口,开胃好吃超下饭大家好,我是舒晨,每天在这里分享各种家常美食,今天给大家分享好吃开胃的茄汁花菜。花菜是餐桌上常见的食材,可以热炒,可以凉拌,做法多种多样。今天分享的茄汁花菜,酸甜适中,花……在石岛小城中生活的非常惬意我在石岛小城中生活的非常惬意!我就把这些感受说出来。石岛的称谓不断发生变化。石岛在唐朝的时候称谓赤山,何时称谓是石岛,准确的称谓无从具体考究。在宋朝的时代的码头大约……日日不见你,日日想念你,你一生不来,我想你一生我本向往清宁自在的生活,却因为你的出现坠入红尘。我本喜欢无扰无争的自在,却因为对你的情深陷入红尘的纷纷扰扰中。也曾想过放下痴念,偏偏挣不脱情丝羁绊,这些年,我从未有……
一颗870经典永流传,盘点今年搭载骁龙870的手机【1】RedmiK40S搭载高通一代神U骁龙870处理器,采用台积电7nm的工艺制程,性能和功耗表现达到一个完美的平衡,无论日常还是游戏,表现都非常不错正面是一块6……九月一日,租房可以积分入学提取公积金正式执行北京日报报道,9月1日起,全国首个规范住房租赁的地方性法规《北京市住房租赁条例》将正式实施,租房也需进行合同网签和备案登记。图,北京日报报道网签和备案的租赁合同不但……街机游戏极不公平的伤害保护机制,BOSS靠一丝血活活耗死玩家在格斗游戏中,有一种说法叫做伤害保护。刚开局时,大家的战斗力都比较强,伤害也是比较高的,但随着血量不断扣除,伤害也开始降低。《豪血寺一族》比较明显,初期一个重腿踢出来的血……大神新手村就翻车?暗黑不朽联手CC直播整活,网友高呼炸裂这几天最火爆的手游,想必非《暗黑破坏神:不朽》莫属了。玩家们除了组队冲级爬塔外,各个网络直播平台上的主播们也纷纷涌入庇护之地,领略这款顶级ARPG手游所独有的魅力。要说到……数字中国建设积厚成势图江西省赣州市南康区家具零部件共享配料制作中心,工人通过数字化生产线导入编程代码,遥控智能设备加工零件。朱海鹏摄(中经视觉)图在第五届数字中国建设成果展览会上,机器人正在……河南工业年中成绩单电子信息表现优异,汽车行业拖后腿顶端新闻河南商报讯(记者郝瑞铃)7月27日上午,河南省工业2022年年中成绩单出炉。记者从河南省人民政府新闻办公室了解到,2022上半年,河南省多数行业实现平稳增长,40……三星嘲讽iPhone14缺乏创新引热议曾调侃苹果不送充电器作为苹果主要竞争对手之一,三星与苹果的斗争可以说从来没断过,日前,三星在一段广告中,嘲讽苹果不会有任何创新和新功能。三星在GalaxyS22Ultra和ZFlip4的广告……索尼Xperia5IV发布,电池容量提升10头条创作挑战赛索尼正式发布了Xperia5系列的第四版,名字是索尼Xperia5IV。乍一看,它只会让你想起它的前身,Xperia5III。当然,除了外观延续其前身……中国9大最美公路,一生一定要去体验一次,风景着实令人震撼导语:习惯了车水马龙的城市,厌倦了闪烁的霓虹灯,更加渴望诗和远方。中国有9条公路,不管你是有车一族还是无车一族都适合去一趟,沿途的无数美丽的风景等着你,走过前4条公路都不枉此生……好像性能还不错?玩一玩intelNUCAtlas峡谷赛扬N5最近硬件大降价,我也发现了不少便宜好玩的东西。我原本以为intel的NUC猎豹峡谷51mm高度已经是NUC的极限了,最近才发现其实NUC11的Atlas峡谷才是这个序列里面最小……后悔了?姆巴佩遭到批评,名嘴言论更为直接,世界第一人名过于实本赛季非常强势的巴黎意外地丢分了,没有了最低消费,头号球星姆巴佩更是相当低效,可以说,状态十分低迷的姆巴佩是巴黎被逼平的主要原因。换个角度说,姆巴佩对巴黎的重要性就可想而知了。……大名单仅13人!篮网3换1追NBA盖帽王,还能签安东尼杜兰特申请离队一事已经有了结果,杜兰特最终决定留下,继续和篮网的合作关系。杜兰特留下,篮网将继续他们的争冠之旅。美媒体报道,篮网目前有13名NBA合同球员,一个双向合同球……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网